2011-01-17 17 views
19

Ho una personalizzazione ListView. Questo ListView contiene 1 Immagine e 6 TextView s. Per recuperare il valore ho creato un setOnItemClickListener(...). Ogni volta che clicco su ListView come posso effettivamente recuperare tutti i dati dal 6 TextView s?setOnItemClickListener su ListView personalizzato

risposta

2

Se nel listener si ottiene il layout di root dell'articolo (ad esempio itemLayout) e si danno alcuni identificativi alle visualizzazioni di testo, è possibile ottenerli con qualcosa come itemLayout.findViewById(R.id.textView1).

+0

Grazie mille pietre. – kangalert

+0

@kangalert prego.ricorda di contrassegnare le risposte accettate (fai clic sul segno di spunta accanto alla risposta), per far sapere che è una soluzione funzionante. si alza anche il tuo e reputazione di rispondente :) – bigstones

52

codice di esempio:

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); 
    } 
}); 

Nel codice di esempio precedente, il listItem dovrebbe contenere i dati selezionati per la textView.

+3

ragazzi non sono in grado di percepire il tocco anche se scrivo un brindisi dentro onItemClick non sta mostrando – abhishek

+0

@abhishek, lo stesso problema con me anche –

10

Anch'io ho avuto lo stesso problema .. Se pensiamo logicamente po 'siamo in grado di ottenere la risposta .. Ha funzionato per me molto bene .. Spero u otterrà esso ..

  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 - nota che 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 - noti cheview.findViewById(R.id.txtLstItem) - come impostare il valore a TextView da setText() metodo che abbiamo ottenere il testo da TextView di View oggetto restituito dal metodo onItemClick. OnItemClick() restituisce la vista corrente.

    TextView v=(TextView) view.findViewById(R.id.txtLstItem); 
    Toast.makeText(getApplicationContext(), "selected Item Name is "+v.getText(), Toast.LENGTH_LONG).show();** 
    

    Usando questa semplice logica che possiamo ottenere altri valori come CheckBox, RadioButton, ImageView ecc

    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(); 
         } 
        } 
    ); 
    
+0

Ho lo stesso codice ma non funzionerà per me –

2

Se aiuta nessuno, ho scoperto che il problema era già avuto un androide : evento onClick nel mio file di layout (che ho gonfiato per le righe di ListView). Questo sostituiva l'evento onItemClick.

1

Se le risposte precedenti non funzionano, forse non è stato aggiunto il valore restituito nel metodo getItem nell'adattatore personalizzato vedere la domanda this e controllare la prima risposta.

Problemi correlati