Plusieurs liste de choix avec vue personnalisée?
J'ai vu l'exemple com.exemple.android.les api.vue.List11 de ApiDemos. Dans cet exemple, chaque ligne prend le point de vue android.R.simple_list_item_multiple_choice. Chacun de ces points de vue a un TextView
et un CheckBox
.
Maintenant, je veux que chacun de vue pour avoir 2 TextView
s et 1 CheckBox
, un peu similaire à la List3 exemple. J'ai essayé de créer un fichier de mise en page personnalisée row.xml comme ceci:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<CheckBox
android:id="@+id/checkbox"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="fill_parent" />
<TextView
android:id="@+id/text_name"
android:textSize="13px"
android:textStyle="bold"
android:layout_toLeftOf="@id/checkbox"
android:layout_alignParentLeft="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/text_phone"
android:textSize="9px"
android:layout_toLeftOf="@id/checkbox"
android:layout_below="@id/text_name"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</RelativeLayout>
Puis dans Activity
's onCreate()
, je fais comme ceci:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Query the contacts
mCursor = getContentResolver().query(Phones.CONTENT_URI, null, null, null, null);
startManagingCursor(mCursor);
ListAdapter adapter = new SimpleCursorAdapter(this,
R.layout.row,
mCursor,
new String[] { Phones.NAME, Phones.NUMBER},
new int[] { R.id.text_name, R.id.text_phone });
setListAdapter(adapter);
getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
}
Le résultat ressemble à ce que je veux, mais il semble que la liste ne sais pas quel élément est sélectionné. Aussi, j'ai besoin de cliquer exactement sur le CheckBox
. Dans le List11 exemple, j'ai seulement besoin de cliquer sur l'élément ligne.
Alors, que dois-je faire pour faire une liste à choix multiples avec mon affichage personnalisé pour chaque ligne? Merci beaucoup.
- Avez-vous trouvez la réponse à celle-ci? un exemple peut-être? J'ai la même question 🙂 stackoverflow.com/questions/3858501/...
- Alors, y avait-il une solution ? Je suis coincé sur le même problème.
Vous devez vous connecter pour publier un commentaire.
Vous avez à faire votre propre
RelativeLayout
qui implémente l'Checkable
de l'interface et de disposer d'une référence à laCheckBox
ou à laCheckedTextView
(ou une liste si c'est à choix multiple mode).Regarder ce post:
http://www.marvinlabs.com/2010/10/29/custom-listview-ability-check-items/
La réponse de Rahul Garg est bon pour la première fois, la liste est chargé, si vous voulez quelques lignes à vérifier en fonction du modèle de données, mais après que vous avez à gérer la cocher/décocher les événements par vous-même.
Vous pouvez remplacer le
onListItemCLick()
de laListActivity
pour cocher/décocher les lignesSi vous le faites, ne définissez pas la
ListView
àCHOICE_MODE_MULTIPLE
, parce qu'il fait des choses étranges lors de l'appel de la fonction.Pour récupérer la liste validée des lignes, vous devez mettre en œuvre une méthode de vous-même, en appelant
getCheckItemIds()
sur leListView
ne fonctionne pas:Non, il ne le fait pas. Il a un
CheckedTextView
.Essayer de faire le
CheckBox
android:id
valeur"@android:id/text1"
et voir si cela aide. C'est l'IDENTIFIANT utilisé par Android pourCheckedTextView
danssimple_list_item_multiple_choice
.$ANDROID_SDK/platforms/$VERSION/data/res
, où$ANDROID_SDK
est partout où vous avez installé le SDK et$VERSION
est certaine version d'Android (par exemple,android-2.1
).La solution est de créer une Vue personnalisée qui implémente l'interface Cliquable.
Et de créer une mise en page personnalisée pour les éléments de la liste en utilisant le nouveau widget.
Puis créer une nouvelle Carte à l'aide de la mise en page ci-dessus.
Il est possible par une astuce
dans votre ListActivtyClass dans la méthode
maintenant dans votre coutume Adaptateur
de cette façon, vous pouvez personnaliser l'affichage de l'adaptateur lorsque l'élément est sélectionné dans la liste.
Exemple Simple comment obtenir une mise en page personnalisée de travail personnalisés case:
FriendsAdapter
instance savoir cefriendsListView
est de référencement?Je l'ai trouvé très utile ce petit code: http://alvinalexander.com/java/jwarehouse/apps-for-android/RingsExtended/src/com/example/android/rings_extended/CheckableRelativeLayout.java.shtml
Il est un excellent ajout à @ferdy182 's http://www.marvinlabs.com/2010/10/29/custom-listview-ability-check-items/ contenu.
Ont la solution ... Vous pouvez obtenir le nombre de clics sur les points de vue (comme des cases à cocher dans des mises en page personnalisées de ligne) par l'ajout de port d'écoute de chacun d'eux dans la carte elle-même alors que vous retournez le converti en vue de getView(). Vous pouvez éventuellement avoir à passer une référence de l'objet de la liste si vous avez l'intention d'obtenir toute la liste des info. comme l'id de ligne.
Je tiens à confirmer que la Pritam réponse est bonne. Vous avez besoin d'un
onClickListener
sur chaque élément de liste (définir la carte degetView()
).Vous pouvez créer un nouveau
onClickListener()
pour chaque élément, ou ont l'adaptateur de mettre en œuvreonClickListener()
- dans ce cas, les articles doivent être marqués pour l'auditeur, à savoir, l'élément sur lequel il fonctionne.En s'appuyant sur la liste
onItemClickListener()
- comme quelqu'un l'a conseillé dans un autre thread - ne fonctionne pas comme lesCheckBox
va intercepter l'événement click de sorte que la liste ne l'aurez pas.Et enfin @Rahul et JVitella:
La situation est que la
CheckBox
sur un élément de la liste doit être cliquable et vérifiables indépendamment de l'élément de la liste elle-même. Donc la solution est que je viens de décrire ci-dessus.