OnItemClickListener y OnClickListener no funcionan para ListView

He usado un ListView personalizado y estoy mostrando algunos datos usando el mismo ListView.

Cuando hago clic en el elemento Vista de lista, no se llama al onClickListener . No puedo seleccionar ningún elemento de la lista.

Código de diseño:

        

Código de adaptador:

  public class CustomListAdapter extends BaseAdapter { ArrayList PropertiesArray; private LayoutInflater Inflater; public CustomListAdapter(ArrayList PropertiesArray) { this.PropertiesArray=PropertiesArray; } @Override public int getCount() { // TODO Auto-generated method stub return PropertiesArray.size(); } @Override public Object getItem(int position) { return PropertiesArray.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, final ViewGroup parent) { if (convertView == null) { LayoutInflater inflater = LayoutInflater.from(parent.getContext()); convertView = inflater.inflate(R.layout.customlistview, parent, false); } final Propety ListArray = PropertiesArray.get(position); TextView tvPropertyName = (TextView) convertView.findViewById(R.id.tvCity); tvPropertyName.setText(ListArray.getName()); TextView tvPrice = (TextView) convertView.findViewById(R.id.tvprice); tvPrice.setText(ListArray.getPrice()); ImageView imgProperty = (ImageView) convertView.findViewById(R.id.list_image); imgProperty.setImageResource(R.drawable.ic_launcher); convertView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(parent.getContext(), "view clicked: " + ListArray.getName(), Toast.LENGTH_SHORT).show(); } }); return convertView; } } 

Código ListView:

  ListView propertylistview = (ListView) findViewById(R.id.listview); CustomListAdapter customlistview=new CustomListAdapter(PropertiesArray); propertylistview.setAdapter(customlistview); 

ListView XML:

   

custom.xml:

            

Incluso el desplazamiento no funciona.

No puedo entender por qué está pasando esto? ¿Me estoy perdiendo algo?

Cualquier ayuda para resolver esto es apreciada.

Lo siguiente hará el trabajo en tu caso.

 ListView propertylistview = (ListView) findViewById(R.id.listview); propertylistview.setOnItemClickListener( myListViewClicked ): OnItemClickListener myListViewClicked = new OnItemClickListener() { @Override public void onItemClick(AdapterView< ?> parent, View view, int position, long id) { Toast.makeText(YourActivity.this, "Clicked at positon = " + position, Toast.LENGTH_SHORT).show(); } }; 

No olvides eliminar lo siguiente del CustomAdapter

  convertView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(parent.getContext(), "view clicked: " + ListArray.getName(), Toast.LENGTH_SHORT).show(); } }); 

Estoy de acuerdo con Ninjia, pero debe agregarlos al código XML: debe definir en todos los objetos secundarios en la vista de lista de elementos (TextView, ImageView, etc.):

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

Y para el elemento raíz RelativeLayout / LinearLayout y así, defina:

 android:clickable="false" android:descendantFocusability="blocksDescendants" android:focusable="false" android:focusableInTouchMode="false" 

Si no los define, “atraparán” el evento click. Y si tiene un adaptador de lista personalizada, simplemente verifique que anule:

 @Override public boolean isEnabled(int position) { return true; } 

el código simple que resolvió mi problema, y ​​el método view.setOnClickListener está dentro de mi adaptador personalizado

  view.setFocusable(false) 

Si los eventos táctiles son interceptados dentro del diseño de la celda, en el diseño de su celda personalizada, configure android:descendantFocusability="blocksDescendants" en el diseño de nivel superior de su celda. Para mí, era demasiado doloroso agregar atributos xml a cada vista individual.

Tenga en cuenta que esto también se puede establecer en código:

cell.setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS);

También probé esto con un ListView dentro de una celda, y tuve que anular en TouchEvent para que funcione:

 public class NoTouchListView extends ListView { @Override public boolean onTouchEvent(MotionEvent ev) { return false; } } 

Verifique el diseño de la fila de su lista una vez:

diseño o cualquier vista no debe ser `android: clickable =” true “y android: focusable =” true ”

si está allí simplemente elimine y ejecute la aplicación nuevamente.

Incluso yo estaba teniendo el mismo problema, estoy teniendo una checkbox, hice lo siguiente para enmascarar el trabajo ItemClickListener,

Se agregaron las siguientes propiedades a la checkbox

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

y ItemClickListner comenzó a funcionar.

Para un ejemplo detallado puede ir a través del enlace,

http://knowledge-cess.com/android-itemclicklistner-with-checkbox-or-radiobutton/

Espero que ayude ¡Salud!

Para TextView también deberías usar

 android:textIsSelectable="false" 

https://developer.android.com/reference/android/widget/TextView.html#setTextIsSelectable