2011-01-17 20 views
19

Tengo un ListView personalizado. Este ListView contiene 1 Imagen y 6 TextView s. Para recuperar el valor, he creado un setOnItemClickListener(...). Cuando hago clic en ListView, ¿cómo puedo recuperar todos los datos del 6 TextView s?setOnItemClickListener en ListView personalizado

Respuesta

2

Si en el oyente obtiene el diseño de la raíz del elemento (digamos itemLayout), y le dio algunos id a las textviews, puede obtenerlos con algo como itemLayout.findViewById(R.id.textView1).

+0

Muchas gracias bigstones. – kangalert

+0

@kangalert de nada.recuerde marcar las respuestas aceptadas (haga clic en la marca de verificación junto a la respuesta), para que la gente sepa que esa es una solución que funciona. también aumenta la reputación de los tuyos y tuyos :) – bigstones

52

Código de ejemplo:

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

En el código de ejemplo anterior, la listItem debe contener los datos seleccionados para la textView.

+3

chicos no soy capaz de sentir el tacto incluso si escribo un brindis en el interior deItemClick no se muestra – abhishek

+0

@abhishek, el mismo problema conmigo también –

10

yo también tenía el mismo problema .. Si pensamos lógicamente poco podemos obtener la respuesta .. A mí me funcionó muy bien .. espero que u conseguirá ..

  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 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 - Tenga en cuenta queview.findViewById(R.id.txtLstItem) - como lo establece el valor en TextView por setText() método que conseguir texto desde TextView por View objeto devuelto por el método onItemClick. OnItemClick() devuelve la vista actual.

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

    Usando esta lógica simple que podemos obtener otros valores como CheckBox, RadioButton, etc. ImageView

    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

Tengo el mismo código pero no funciona para mi –

2

Si se ayuda a nadie, me encontré con que el problema era que ya tenía un androide : evento onClick en mi archivo de diseño (que inflé para las filas de ListView). Esto estaba reemplazando al evento onItemClick.

1

Si las respuestas anteriores no funcionan, tal vez no haya agregado el valor de retorno en el método getItem en el adaptador personalizado, vea this pregunta y revise la primera respuesta.

Cuestiones relacionadas