Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


No puede hacer clic en la fila listview con imagebutton

Tengo problemas con listview. Sus elementos (filas) tienen imagebutton. Imagebutton tiene "android: onClick" para que este evento onclick funcione, pero haga clic en la fila no funciona. Si quito imagebutton del artículo de la fila, haga clic en trabajos de la fila (el listview tiene listner correcto del onclick). Cómo puedo arreglarlo ? Necesito un evento onclick cuando el usuario haga clic en imagebutton y standart haga clic en evento, cuando el usuario seleccione la fila (no haga clic en el imagebutton pero haga clic en la fila)

Mi lista:

<ListView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/restaurants_list" android:layout_width="fill_parent" android:layout_height="fill_parent" android:divider="@color/list_devider" android:dividerHeight="1dp" android:cacheColorHint="@color/list_background" /> 

  • ¿Cómo hacer que los elementos se puedan hacer clic en la vista de lista?
  • Cómo actualizar algunos datos en un ListView sin utilizar notifyDataSetChanged ()?
  • Cómo mostrar los contactos en un listview en Android para Android api 11+
  • ListView addHeaderView hace que la posición aumente en uno?
  • Obtener un elemento seleccionado en listview cuando genero el menú contextual
  • Animar agregar / quitar elementos de ListView con CursorAdapter es posible?
  • ¿Cómo implementar una lista interminable con RecyclerView?
  • Adición dinámica de elementos a la vista de lista mediante el adaptador personalizado para la aplicación de Android
  • 7 Solutions collect form web for “No puede hacer clic en la fila listview con imagebutton”

    Desafortunadamente,

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

    No funciona para ImageButton .

    Finalmente encontré la solución aquí . En su xml de diseño para esos elementos, agregue

     android:descendantFocusability="blocksDescendants" 

    A la vista raíz.

    Funciona perfectamente para un ListView que tiene ImageButton s. De acuerdo con la referencia oficial , blocksDescendants significa que el ViewGroup bloqueará a sus descendientes de recibir el foco.

    Puede utilizar un adaptador personalizado para su listView (si no lo ha hecho ya). Y ahí, en el getView(int position, View inView, ViewGroup parent) del adaptador haga algo como esto:

     @Override public View getView(int position, View inView, ViewGroup parent) { View v = inView; ViewHolder viewHolder; //Use a viewholder for sufficent use of the listview if (v == null) { LayoutInflater inflater = (LayoutInflater) adaptersContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = inflater.inflate(R.layout.list_item, null); viewHolder = new ViewHolder(); viewHolder.image = (ImageView) v.findViewById(R.id.ImageView); v.setTag(viewHolder); } else { viewHolder = (ViewHolder) v.getTag(); } ..... viewHolder.image.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //Click on imageView }i }); v.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //Click on listView row } }); ..... return (v); } 

    Vea aquí si necesita ayuda para crear su adaptador personalizado.

    Si una fila de listView tiene algún elemento que se pueda hacer clic como Button , Image etc onItemClick entonces onItemClick no funcionará. Por lo tanto, necesita escribir el oyente de getView en getView de su adaptador de lista.

    Para más lea esto .

    Establezca estas propiedades para su botón:

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

    O puede configurarlo dinámicamente en su clase de adaptador:

      yourButton.setFocusable(false); yourButton.setFocusableInTouchMode(false); 

    Y asegúrese de que establece el modo de selección como único para el listview:

      listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 

    Si una fila tiene varios elementos que se pueden hacer clic, onItemClick () no funcionará. Tendrá que configurar OnClickListener en el método getView() . Almacene a los oyentes la etiqueta de View para que puedan ser reciclados, agregue métodos a sus oyentes para que puedan ser especializados para diferentes filas.

      @Override public View getView(int position, View convertView, ViewGroup parent) { View view = super.getView(position, convertView, parent); RowClickListeners listeners = (RowClickListeners) view.getTag(); if (listeners == null) { listeners = new RowClickListeners(); } // Row click listener: RowClickListener onClickListener = listeners.rowClickListener; if (onClickListener == null) { onClickListener = new RowClickListener(); listeners.rowClickListener = onClickListener; } onClickListener.setToPosition(pos); view.setOnClickListener(onClickListener); // Overflow listener: View btn = view.findViewById(R.id.ic_row_btn); ButtonListener btnListener = listeners.buttonClickListener; if (rowListener == null) { btnListener = new ButtonListener(activity); listeners.rowClickListener = btnListener; } btnListener.setToPosition(pos); btnListener.setCollection(collectionId); btn.setOnClickListener(btnListener); } public static class RowClickListeners { public RowClickListener rowClickListener; public ButtonListener buttonClickListener; } 

    En mi caso, android:descendantFocusability="blocksDescendants" para la capa principal no funcionó, ni en el ListView. También intenté el android:focusable="false" android:focusableInTouchMode="false" que oí que está trabajando para los botones, pero tenía ImageButton así que no.

    Pero establecer las propiedades del botón en el archivo CS del diseño funcionó.

     var imageButton = view.FindViewById<ImageButton>(Resource.Id.imageButton1); imageButton.Focusable = false; imageButton.FocusableInTouchMode = false; imageButton.Clickable = true; 

    Ninguna respuesta por encima trabajó para mí, pero una combinación lo hizo.

    Ahora android:descendantFocusability="blocksDescendants" en el ListView y android:focusable="false" android:focusableInTouchMode="false" en los ImageButtons en el XML Y en Java también establecí descendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS) en el ListView y focusable(false), focusableInTouchMode(false), clickable(true) en los ImageButtons.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.