Android ListView avec RadioButton dans singleChoice mode et une ligne personnalisée mise en page

J'ai un ListView, qui est en singleChoice mode. Tout ce que je veux c'est afficher un bouton radio à côté, que lorsque l'utilisateur clique dessus met en évidence à dire qu'il est sélectionné, et quand un autre est cliqué que l'on remonte pas sélectionné et que le nouveau est sélectionnée. Pourquoi est-ce si difficile? Cela ne devrait pas être si compliqué. J'ai passé JOURS à la recherche d'une réponse à cela et je n'ai rien trouvé, donc je demande, nous l'espérons, dans un style clair et concis.

Ma mise en page pour la liste de (R. layout.view_orders):

<?xml version="1.0" encoding="utf-8"?>
<ListView 
        android:choiceMode="singleChoice"
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:divider="@drawable/list_divider"
        android:dividerHeight="1px"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:cacheColorHint="#00000000">
</ListView>

Ma ligne personnalisée (R. layout.orders_row):

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:app="http://schemas.android.com/apk/res/com.xxx.xxxxxx"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="6dip">
<com.xxx.xxxxxx.VerticalLabelView
app:text="SHORT"
app:textColor="#666"
app:textSize="14sp"
android:id="@+id/state"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true" />
<TextView
android:id="@+id/quantity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/state" 
android:layout_centerVertical="true"
android:gravity="center"
android:textSize="40sp"
android:layout_margin="2dip"
android:minWidth="30dip"
android:textColor="#555" />
<RelativeLayout
android:layout_toRightOf="@id/quantity"
android:layout_centerVertical="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/instrument"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="20sp"
android:textColor="#333"
android:layout_marginLeft="2dip"
android:layout_marginRight="2dip"
/>
<TextView
android:id="@+id/deets"
android:layout_below="@id/instrument"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="16sp"
android:textColor="#888"
android:layout_marginLeft="2dip"
android:layout_marginRight="2dip"
/>
</RelativeLayout>
<RadioButton
android:id="@+id/selector"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
/>
</RelativeLayout>

Mon onCreate() méthode:

@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.view_orders);
client = new Client(handler);
ola = new OrdersAdapter(this, R.layout.orders_row, Orders);
setListAdapter(ola);
final RelativeLayout loading = (RelativeLayout) findViewById(R.id.loading);
panel = (PositionsPanel) findViewById(R.id.panel);
Utility.showProgressBar(loading);
client.Connect("orders");
}

Maintenant, tout sous-jacente fonctionne comme prévu, vous cliquez sur un bouton radio et à travers elle de la balise, je peux bien sélectionner cet élément de la liste et de le manipuler comme je veux. Toutefois, lorsque le premier bouton radio est sélectionné, le dernier sera sélectionné. Cliquez sur le même bouton radio fois, et il est maintenant sélectionnée. Cliquez sur une fois de plus et rien ne se passe, à la fois le dernier et le premier sont sélectionnés. Maintenant, je clique sur n'importe quel autre sur la liste, il est sélectionné comme prévu. Cliquez sur quelqu'un de la radio choisie boutons et rien ne se passe, le bouton radio reste sélectionné.

J'ai essayé d'utiliser les éléments suivants dans onCreate():

@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.view_orders);
client = new Client(handler);
ola = new OrdersAdapter(this, android.R.layout.simple_list_item_single_choice, Orders);
setListAdapter(ola);
final RelativeLayout loading = (RelativeLayout) findViewById(R.id.loading);
panel = (PositionsPanel) findViewById(R.id.panel);
Utility.showProgressBar(loading);
client.Connect("orders");
}

et qui montre juste pas de boutons radio à tous. GÉNIAL.

Maintenant peut-être (lire: le plus probable), je suis juste dense et ne peut pas comprendre cela, mais j'ai vu cette question posée beaucoup avec pas de vraie réponse. Beaucoup de références à d'autres tutoriels ou à la Commonsware gars du livre. Cependant, les commentaires sont vieux maintenant, et son référentiel a tellement changé, que ceux qui ne sont pas plus de réponses correctes.

Donc, quelqu'un a une idée de comment obtenir la fonctionnalité attendue de sortir de cette situation? Ou, à défaut, juste me passer le long de l'application GMail est le code source. 🙂

InformationsquelleAutor zkwentz | 2010-11-22