texto studio presionar poner mostrar medidas los imagen iconos hacer funcionar con como botones boton asignar acciones android listview imagebutton

android - studio - no puede hacer clic en la fila de vista de lista con botón de imagen



mostrar imagen al presionar boton android studio (7)

Desafortunadamente,

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

no funciona para ImageButton .

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

android:descendantFocusability="blocksDescendants"

a la vista raíz

Funciona perfectamente para un ListView que tiene ImageButton s. Según la referencia oficial , blocksDescendants significa que ViewGroup impedirá que sus descendientes reciban el foco.

Tengo problemas con ListView. sus elementos (filas) tienen botón de imagen. imagebutton tiene "android: onClick", por lo que este evento onclick funciona, pero hacer clic en la fila no funciona. si elimino imagebutton del elemento de la fila, hago clic en la fila funciona (listview tiene el onclick listner correcto). Cómo puedo arreglarlo ? Necesito el evento onclick cuando el usuario hace clic en el botón imagebutton y en el evento standart click, cuando el usuario selecciona la fila (no hace clic en el botón image pero hace clic en la fila)

mi lista de 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" />


En mi caso, android:descendantFocusability="blocksDescendants" para la capa principal no funcionó, ni en ListView. También probé con android:focusable="false" android:focusableInTouchMode="false" que escuché que funciona para Buttons, pero tenía ImageButton, por lo que no funcionaba.

Pero configurar 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;


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 configurar el modo de elección como único para la vista de lista:

listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);


Puede usar un adaptador personalizado para su listaView (si no lo ha hecho). Y allí, 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); }

Consulte here si necesita ayuda para crear su adaptador personalizado.


Si una fila de listView tiene algún elemento seleccionable como Button , Image ..etc onItemClick then onItemClick no funcionará. Por lo tanto, debe escribir el oyente clic en getView de su adaptador de lista.

Para más leer this .


Si una fila tiene múltiples elementos seleccionables, onItemClick () no funcionará. Deberá configurar OnClickListener en el método getView() . Almacene a los oyentes la etiqueta de la Vista 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; }


ninguna de las respuestas anteriores funcionó para mí, pero sí una combinación.

Ahora configuro android:descendantFocusability="blocksDescendants" en el ListView and android:focusable="false" android:focusableInTouchMode="false" en los ImageButtons en el XML AND en Java También configuré descendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS) en el ListView y focusable(false), focusableInTouchMode(false), clickable(true) en los ImageButtons.