J'ai une coutume ListView
. Cette ListView
contient 1 Image et 6 TextView s. Pour récupérer la valeur, j'ai créé une setOnItemClickListener(...)
. À chaque fois que je clique sur ListView
, comment puis-je récupérer toutes les données du 6 TextView s?
Exemple de code:
ListView list = (ListView) findViewById(R.id.listview);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Object listItem = list.getItemAtPosition(position);
}
});
Dans l'exemple de code ci-dessus, la variable listItem
doit contenir les données sélectionnées pour la variable textView
.
Moi aussi j'ai eu le même problème ... Si nous pensons logiquement un petit peu, nous pouvons obtenir la réponse ... Cela me convient très bien ... J'espère que vous l'obtiendrez ...
listviewdemo.xml
<ListView
Android:id="@+id/listview"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:paddingBottom="30dp"
Android:paddingLeft="10dp"
Android:paddingRight="10dp" />
listviewcontent.xml
- notez que TextView
- Android:id="@+id/txtLstItem"
<LinearLayout
Android:id="@+id/listviewcontentlayout"
Android:layout_width="0dp"
Android:layout_height="fill_parent"
Android:layout_weight="1"
Android:orientation="horizontal">
<ImageView
Android:id="@+id/img1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginRight="6dp" />
<LinearLayout
Android:layout_width="0dp"
Android:layout_height="fill_parent"
Android:layout_weight="1"
Android:orientation="vertical">
<TextView
Android:id="@+id/txtLstItem"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:gravity="left"
Android:shadowColor="@Android:color/black"
Android:shadowRadius="5"
Android:textColor="@Android:color/white" />
</LinearLayout>
<ImageView
Android:id="@+id/img2"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginRight="6dp" />
</LinearLayout>
ListViewActivity.Java
- Notez que view.findViewById(R.id.txtLstItem)
- En définissant la valeur sur TextView
par la méthode setText()
, nous obtenons le texte de TextView
par View
objet renvoyé par la méthode onItemClick
. OnItemClick()
renvoie la vue actuelle.
TextView v=(TextView) view.findViewById(R.id.txtLstItem);
Toast.makeText(getApplicationContext(), "selected Item Name is "+v.getText(), Toast.LENGTH_LONG).show();**
En utilisant cette logique simple, nous pouvons obtenir d'autres valeurs telles que CheckBox
, RadioButton
, ImageView
etc.
ListView List = (ListView) findViewById(R.id.listview);
cursor = cr.query(CONTENT_URI,projection,null,null,null);
adapter = new ListViewCursorAdapter(ListViewActivity.this, R.layout.listviewcontent, cursor, from, to);
cursor.moveToFirst();
// Let activity manage the cursor
startManagingCursor(cursor);
List.setAdapter(adapter);
List.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick (AdapterView < ? > adapter, View view,int position, long arg){
// TODO Auto-generated method stub
TextView v = (TextView) view.findViewById(R.id.txtLstItem);
Toast.makeText(getApplicationContext(), "selected Item Name is " + v.getText(), Toast.LENGTH_LONG).show();
}
}
);
Si dans l'écouteur, vous obtenez la disposition racine de l'élément (par exemple, itemLayout
) et que vous avez attribué des identifiants aux vues de texte, vous pouvez les obtenir avec quelque chose comme itemLayout.findViewById(R.id.textView1)
.
Si cela peut aider quelqu'un, j'ai découvert que le problème était que j'avais déjà un événement Android: onClick dans mon fichier de présentation (que j'ai gonflé pour les lignes de ListView). Cela remplaçait l'événement onItemClick.
Si les réponses ci-dessus ne fonctionnent pas, vous n'avez peut-être pas ajouté de valeur de retour dans la méthode getItem de l'adaptateur personnalisé, consultez la question this et consultez la première réponse.