setonitemclicklistener - setonclicklistener listview android studio
setOnItemClickListener en ListView personalizado (5)
Tengo un ListView
personalizado. Este ListView
contiene 1 imagen y 6 TextView s. Para recuperar el valor, he creado un setOnItemClickListener(...)
. Cada vez que hago clic en el ListView
¿cómo podría recuperar todos los datos de los 6 TextView s?
Si ayuda a alguien, descubrí que el problema era que ya tenía un evento android: onClick en mi archivo de diseño (que inflé para las filas de ListView). Esto estaba reemplazando al evento onItemClick.
Si en el oyente se obtiene el diseño de raíz del elemento (por ejemplo itemLayout
), y se le dieron algunos id a las textviews, se pueden obtener con algo como itemLayout.findViewById(R.id.textView1)
.
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.
Yo también tuve el mismo problema ... Si pensamos lógicamente poco, podemos obtener la respuesta. Me funcionó muy bien. Espero que lo entiendas ...
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
: tenga en cuenta queTextView
-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
- Tenga en cuenta queview.findViewById(R.id.txtLstItem)
- al establecer el valor enTextView
por el métodosetText()
obtenemos el texto deTextView
por el objetoView
devuelto por el métodoonItemClick
.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, podemos obtener otros valores como
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(); } } );
Código de muestra:
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, listItem
debe contener los datos seleccionados para textView
.