Cómo manejar ListView haga clic en Android
¿Cómo escucho un evento de clic en un ListView?
Esto es lo que tengo ahora
ListView list = (ListView)findViewById(R.id.ListView01); ... list.setAdapter(adapter);
Cuando hago lo siguiente
list.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { public void onItemSelected(AdapterView parentView, View childView, int position, long id) { setDetail(position); } public void onNothingSelected(AdapterView parentView) { } });
Eso no parece hacer nada al hacer clic.
Y todos esos códigos viven dentro de una clase que extiende Actividad.
En la vista de lista, use setOnItemClickListener
Suponga que el objeto ListView es lv, haga lo siguiente:
lv.setClickable(true); lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { Object o = lv.getItemAtPosition(position); /* write you handling code like... String st = "sdcard/"; File f = new File(st+o.toString()); // do whatever u want to do with 'f' File object */ } });
Debe configurar la vista inflada "Clickable" y "capaz de escuchar los eventos de clic" en su método de clase getView ().
convertView = mInflater.inflate(R.layout.list_item_text, null); convertView.setClickable(true); convertView.setOnClickListener(myClickListener);
Y declare el oyente del tecleo en su ListActivity como sigue,
public OnClickListener myClickListener = new OnClickListener() { public void onClick(View v) { //code to be written to handle the click event } };
Esto sólo es válido cuando está personalizando el adaptador extendiendo BaseAdapter.
Consulte el archivo ANDROID_SDK / samples / ApiDemos / src / com / ejemplo / android / apis / view / List14.java para obtener más detalles
Las dos respuestas antes de la mía son correctas – puede utilizar OnItemClickListener
.
Es bueno notar que la diferencia entre OnItemClickListener
y OnItemSelectedListener
, mientras suena sutil, es de hecho significativo, ya que la selección de elementos y el enfoque están relacionados con el modo táctil de su AdapterView
.
De forma predeterminada, en el modo táctil, no hay selección y enfoque. Puedes echar un vistazo aquí para más información sobre el tema.
Tienes que usar setOnItemClickListener
alguien dijo.
El código debe ser así:
listView.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // When clicked, show a toast with the TextView text or do whatever you need. Toast.makeText(getApplicationContext(), ((TextView) view).getText(), Toast.LENGTH_SHORT).show(); } });
En primer lugar, la clase debe implementar el oyente de clics:
implements OnItemClickListener
A continuación, establezca un listener en ListView
yourList.setOnItemclickListener(this);
Y, finalmente, crear el método clic:
@Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(MainActivity.this, "You Clicked at " +countries[+ position], Toast.LENGTH_SHORT).show(); }
Usted puede echar un vistazo y descargar el código aquí
Esta solución es realmente minimalista y no estropea su código.
En su list_item.xml (NOT listView!) Asigne el atributo android: onClick como este:
<RelativeLayout android:onClick="onClickDoSomething">
Y luego en su actividad llame a este método:
public void onClickDoSomething(View view) { // the view is the line you have clicked on }
Utilice api setOnItemClickListener () en su actividad. A continuación se muestra la muestra.
listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){ @Override public void onItemClick(AdapterView<> parent, View view, int position, long id) { // your code here. } });