ListView rangée de boutons: Comment puis-je créer une coutume Adaptateur qui connecte un point de Vue.OnClickListener à un bouton sur chaque ligne d'une ListView?
Je veux que mon ListView contient pas de boutons, mais le réglage du bouton de la propriété xml, onClick="mafonction", puis en plaçant un public void mafonction(android.vue.Vue de la vue) méthode dans l'activité entraîne une NoSuchMethodException (la trace de la pile est nulle) à être jeté, car, bien que le onclick auditeur est là, il n'a pas le feu à la fonction myFunction(...) et à cause de l'activité pour fermer.
Comment puis-je créer une coutume Adaptateur qui connecte un point de Vue.OnClickListener à un bouton sur chaque ligne d'une ListView?
Mon ListView est créé comme suit...
[activity.java contenu..]
public void myFunction(android.view.View view)
{
//Do stuff
}
[activity.xml contenu..]
<LinearLayout xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".FrmCustomerDetails" >
<ListView android:id="@+id/LstCustomerDetailsList" android:layout_width="fill_parent" android:layout_height="0dip" android:layout_weight="1" android:clickable="true" android:clipChildren="true" android:divider="@null" android:dividerHeight="0dp" android:fastScrollEnabled="true" android:footerDividersEnabled="false" android:headerDividersEnabled="false" android:requiresFadingEdge="vertical" android:smoothScrollbar="true" />
</LinearLayout>
[activity_row_item.xml contenu..]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/Llt" android:layout_width="match_parent" android:layout_height="match_parent" >
<Button android:id="@+id/Btn" android:text="Click me" android:onClick="myFunction" />
</LinearLayout>
La trace de la pile est null
OriginalL'auteur Knickerless-Noggins | 2013-04-18
Vous devez vous connecter pour publier un commentaire.
1. Créer une mise en page pour un type de ligne
Dans ce cas, la ligne est composée de trois de voir les composants:
Xml
pay_list_item.xml la disposition est comme suit:
Remarque: le bouton onClick gestionnaire de défini en xml fichier de mise en page, parce que nous voulons nous référer à une liste spécifique de l'élément.
Faire cela signifie que le gestionnaire sera mis en œuvre dans le fichier d'Activité et chaque bouton de savoir quel élément de la liste à laquelle il appartient.
2. Créer un élément de liste de l'adaptateur
C'est la classe java qui est le contrôleur pour pay_list_item.xml.
Il conserve une référence pour l'ensemble de ses points de vue, et il met aussi ces références dans les tags, l'extension de la ArrayAdapter interface.
La Carte:
Ici on liste les Paiement les objets de classe.
Il y a trois éléments les plus importants ici:
Payment.java est très simple, comme pour l'instant et il ressemble un peu à BasicNameValuePair:
Il y a d'autres obtient et définit pour chaque domaine privé ne sont pas indiqués.
3. ListView ajouter à l'activité de mise en page fichier xml
Dans sa plus simple forme, il suffit d'ajouter ce point de vue de l'activité mise en page:
4. Configurer l'adaptateur à cette liste en vue de l'Activité code Java
Afin d'afficher les éléments dans la vue liste, vous devez configurer sa carte et la carte à une autre liste de tableaux de Paiement des objets (comme je le suis, l'extension d'un adaptateur Tableau ici). Voici le code qui est responsable de la liaison de l'adaptateur à editPersonData.getPayments() ArrayList:
5. Ajout /suppression d'éléments à la liste (et son adaptateur)
Carte est traitée comme toute autre liste de tableaux, de sorte que l'ajout d'un nouvel élément pour il est aussi simple que:
6. Poignée de Supprimer le Paiement événement clic du bouton
Dans une activité de code, où la liste est affichée, ajoutez méthode publique qui va gérer les supprimer cliquez sur le bouton d'action. Le nom de la méthode doit être exactement le même que c'était dans pay_list_item.xml:
L'objet du Paiement a été stocké dans ImageButton l'Étiquette de l'élément. Maintenant, il suffit de la lire à partir de la Balise, et de supprimer cet élément de la carte.
7. Incorporer dialogue de confirmation de suppression de la fenêtre
Probablement vous devez également vous assurer que l'utilisateur intentionnellement appuyé sur le bouton supprimer en lui demandant question supplémentaire dans la boîte de dialogue de confirmation.
Dialogue
a) Créer une boîte de dialogue de l'id de la constante
C'est tout simplement de la boîte de dialogue de l'ID. il doit être unique parmi tous les autres de la fenêtre de dialogue qui est géré par l'activité en cours. Je l'ai mis comme ça:
b) Construire dialogue
J'utilise cette méthode pour construire fenêtre de dialogue:
AlertDialog générateur de modèle est utilisé ici. Je ne fais pas de NegativeButton cliquez sur l'action par défaut de la boîte de dialogue est juste d'être caché. Si la boîte de dialogue confirmer le bouton est cliqué, mon handleRemoveConfirm callback est appelée et l'action est effectuée sur la base de la boîte de dialogue ID:
c) Afficher la boîte de Dialogue
Je afficher la boîte de dialogue après mon bouton supprimer cliquez sur. ShowDialog(int) est Android de l'Activité de la méthode:
showDialog(int) appels de méthode onCreateDialog (également définie dans l'Activité de la classe). Remplacer et de le raconter à votre application que faire si le showDialog a été demandé:
Ok, ce que le diable est getPayments? Vous n'avez jamais fait ça.
OriginalL'auteur Knickerless-Noggins
Prendre un coup d'oeil à ce blog, j'ai écrit exactement sur cette question:
Créer des ArrayAdapter
Il y a des commentaires qui expliquent chaque action que je fais dans la carte.
Voici l'explication en bref:
Permet donc, par exemple, une ligne sur laquelle vous souhaitez placer un
CheckBox
,ImageView
et un
TextView
alors que tous d'entre eux sont cliquables. Ce qui signifie que vous pouvez cliquer sur lela ligne elle-même pour aller à l'autre
Actvity
pour plus de détails sur la ligne, de vérifier saChec
k
Boîte ou appuyez sur laImageView
effectuer une autre opération.Donc ce que vous devez faire est de:
1. D'abord créer un
XML layout
fichier pour votreListView
ligne:2. Deuxième dans votre code java définir un
ViewHolder
, unViewHolder
est conçu pour tenir la ligne de vue, et de cette façon exploitation plus rapidement:
3. Maintenant, nous devons définir
CustomArrayAdapter
, à l'aide de l'adaptateur tableaunous pouvons définir précisément ce qu'est la sortie désirée pour chaque ligne basé sur le contenu de ce
de ligne ou de sa position. Nous pouvons le faire en remplaçant la méthode getView:
4. Maintenant, vous devez définir cette carte, que la carte de votre
ListView
.cette
ListView
peuvent être créés en java ou en utilisant un fichier XML, dans ce cas, je suis à l'aide d'une liste qui a étédéfini dans le fichier XML à l'aide de la “liste” id:
5. Enfin, si nous voulons être en mesure d'appuyer sur la rangée de soi et pas seulement un point de vue à elle
nous devrions attribuer une
onItemClickListener
à laListView
:OriginalL'auteur Emil Adz
Tout d'abord, la manière d'ajouter des auditeurs en xml à l'aide de onClick="fonction" est obsolète. Vous avez besoin d'un ViewHolder classe de lier le bouton dans le fichier xml de votre code java. Ensuite, vous pouvez mettre en œuvre onClickListener.
OriginalL'auteur shiladitya
À l'intérieur de votre getView() de la mise en œuvre de CustomAdapter, vous pouvez essayer comme ci-dessous.
OriginalL'auteur Mani