ListView OnItemClickListener no responde?

He buscado una solución en todas partes, pero no puedo encontrar la manera de implementarlo. Mi OnItemClickListener se ha desactivado de alguna manera en mis filas de ListView , porque tengo un ImageButton en el diseño de la fila, que se encarga del enfoque. Ha habido muchas preguntas que he encontrado, pero ninguna me ha llevado a ninguna parte.

He comprobado esta pregunta, pero realmente no pude entenderlo. Solo necesito una manera de hacer clic en las filas para que pueda detectar cuándo se presiona una fila. La presión prolongada y el enfoque funcionan bien.

En lugar de un OnItemClickListener , agregue un OnClickListener a cada una de sus vistas devueltas desde su adaptador. Tendrá que usar setItemsCanFocus configurar su lista:

 ListView list = (ListView) findViewById(R.id.myList); list.setAdapter(new DoubleClickAdapter(this)); list.setItemsCanFocus(true); 

y luego en getView su adaptador , esto producirá una fila seleccionable. Se supone que el botón está en el xml inflado.

 @Override public View getView(int position, View convertView, ViewGroup parent) { View view = View.inflate(context, R.layout.cell, null); view.setClickable(true); view.setFocusable(true); view.setBackgroundResource(android.R.drawable.menuitem_background); view.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { new AlertDialog.Builder(context).setTitle("touched").show(); } }); return view; } 

configura el ImageButton tu ImageButton :

 android:focusable="false" 

Como AbsListView.onTouchEvent comprueba child.hasFocusable() .

Probé la siguiente solución en SDK niveles 8 y 16.

En getView()

 setFocusable(false); setClickable(false); 

en lugar de establecerlas como verdaderas en getView() del Adaptador, hace lo que creo que quería la pregunta original, y significa que se llama a OnItemClickListener , siempre que OnClickListener no esté configurado en getView() .

Supongo que todo lo que puede hacer en OnClickListener una Vista lo puede hacer con la misma facilidad en OnItemClickListener ListView . ( setOnClickListener en una Vista establece implícitamente que se puede hacer clic en la vista, lo que impide que se OnItemClickListener correspondiente OnItemClickListener ListView , aparentemente).

El comportamiento es como uno esperaría, en términos del estado visual del ImageButton cuando se presiona o se voltea el elemento.

La solución es una ligera ilusión, ya que es el elemento de la lista que se está presionando, no el ImageButton mismo, por lo que si el botón no ocupa todo el elemento de la lista, al hacer clic en otro elemento . Lo mismo para el enfoque. Ese podría ser un precio que vale la pena pagar.

Esto definitivamente funcionará. Agregue esto a la definición del diseño.

 android:descendantFocusability="blocksDescendants" 

Encontré la solución aquí

Una alternativa para configurar un OnClickListener para cada vista es NO usar un ImageButton ; use un ImageView lugar. ImageView aún puede enviar eventos a OnClickListener y no tomará el control.

La mejor forma de hacerlo es esto:

  android:focusable="false" android:focusableInTouchMode="false" 

establece estas propiedades para ese Imagebutton y prueba. yo

Para mi versión de este problema, el problema era que había establecido mi objeto TextView en android:inputType="textMultiLine" . Cuando eliminé esta línea, desapareció el problema de que no se podía hacer clic en la lista. Parece un pequeño error desagradable.

Además, todavía puedo usar las android:minLines/android:maxLines sin problema, por lo que no es un gran problema. Simplemente no es la solución que esperaba.

La siguiente línea resolvió el problema en mi proyecto:

  

Como solución alternativa que funcionó para mí, puede intentar ampliar su adaptador desde BaseAdapter (iso implementando la interfaz ListAdapter )

Ponga este código ImageView nextpage= (ImageView)findViewById(R.id.btnEdit); en lugar de ImageButton . ahora el elemento de la lista está activo

He ImageButton y setFocusable="false" en la definición de diseño no funcionó para mí. Resolvió llamar a setFocusable(false) en el constructor de la subclase.

  listView= (ListView) findViewById(R.id.listview_names); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView< ?> parent, View view, int position, long id) { Toast.makeText(getBaseContext(),"Clicked Button",Toast.LENGTH_LONG).show(); Log.d("h","clicked"); /* Intent intent=new Intent(MainActivity.this,Display_data.class); intent.putExtra("NAME",n); intent.putExtra("AGE",a); startActivity(intent);*/ } }); 

Y esta tostada no está funcionando

El uso de ScrollView puede evitar que onItemClickListener reciba la entrada.

Espero que esto ayude a cualquiera.