web-dev-qa-db-fra.com

setOnItemClickListener sur ListView personnalisé

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?

21
kangalert

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.

55
archana

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 ...

  1. 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" />
    

  2. 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>
    

  3. 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();
            }
        }
    );
    
11
chamu

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).

2
bigstones

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. 

2
stephen mc

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.

1
Misagh Aghakhani