Pregunta

tengo ListView con personalizado Adapter que suministra View a ListView De este modo:

   public View getView(int position, View convertView, ViewGroup parent)
   {
        RelativeLayout.LayoutParams lineParams;
        RelativeLayout line=new RelativeLayout(context);

        TextView tv=new TextView(context);
        tv.setText("Text in postion="+i);
        lineParams=new RelativeLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        lineParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
        line.addView(tv, lineParams);
        lineParams.addRule(RelativeLayout.CENTER_IN_PARENT);

        //checkbox
        CheckBox checkBox=new CheckBox(context);
        lineParams=new RelativeLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        lineParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
        lineParams.addRule(RelativeLayout.CENTER_IN_PARENT);
        line.addView(checkBox, lineParams);
        return line;
    }

Y en algún lugar adentro ListView hay setOnItemClickListener(), que debería interceptar el elemento haciendo clic en eventos. Mi problema de que, cada vez que intento agregar la casilla de verificación al elemento, no recibo ninguna respuesta de mi ListView. Si salto CheckBox o cualquier otro Button funciona.

Estoy realmente atascado con este problema, he probado todo tipo de diseños, alineando, envolviendo, etc., inútil. Parece CheckBox interferir ListView Elemento haga clic en eventos.

¿Alguna idea de cómo superar?

¿Fue útil?

Solución

Simplemente agregue esta línea a las vistas del elemento en lugar de ListView en sí misma

android:focusable="false"

Verifique más detalles sobre esto de Android Custom ListView No se puede hacer clic en los elementos

Otros consejos

Si tiene ImageButtons dentro del elemento de la lista, debe agregar:

android:descendantFocusability="blocksDescendants"

al elemento de elemento de la lista raíz [como el diseño de la raíz].

Luego, dentro de cada imagen de imagen en el elemento de la lista, debe agregar:

android:focusableInTouchMode="true"

Esto funcionó para mí, pero estaba usando ImageButtons, no el botón estándar.

También he enfrentado el mismo problema que he intentado establecer android:focusable="false" a ListView pero no funciona, luego agrego esto al elemento ListView ... Al igual que en mi elemento ListView, he usado el botón de alternancia que estaba creando un problema, agrego android:focusable="false" Para alternar el botón y listView en el elemento, haga clic en el oyente, comience a funcionar nuevamente

Agregue la línea siguiente a su View ListView

android:choiceMode="singleChoice"

o asegúrese de establecer las siguientes líneas en sus campos de texto de diseño

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

También había tenido el problema de un botón en mi ListView. Desafortunadamente, solo establecer el enfoque en falso para todos los objetos en mi adaptador no funcionó para mí.

Ahora tengo una solución.

En su adaptador, cree un OnClickListener para el botón (u otro objeto que se pueda hacer clic) si aún no lo ha hecho. En ese OnClickListener, usted mismo llamas a OnitemClickListener.

public void onClick(View v) {
    mOnItemClickListener.setOnItemClick(mListView, v, vPos, vId);
}

Significa que deberá darle acceso a su adaptador tanto a la vista de lista matriz como a OnitemClickListener.

Puede considerar escribir su OnTouchEvent en su elemento ListView y enviar el TouchEvent adecuado a su vista de hijo, el botón.

Bueno, sé que ninguna de las soluciones anteriores funcionará. Intenté cambiar los atributos XML, pero eso no funciona, pero lo implementé de una nueva manera. Aquí es cómo:

Crear un interfaz CheckBoxOnCheckListener con método onCheckBoxChecked y pasar los parámetros necesarios, implementar la interfaz CheckBoxOnCheckListener en tus actividad o fragmento que contiene vista de la lista.

A continuación en su adaptador, declare un mListener como CheckBoxOnCheckListener, y pasar esto como un parámetro al constructor de adaptador desde fragment/activity y lanzarlo a CheckBoxOnCheckListener y asignar a mListener.

Siguiente conjunto mListener como itemView.onClick o CheckBox.onCheckCheckedListener y onCheckChanged Llamada de método mListener.onCheckBoxChecked.

Eso es todo. Definitivamente funcionará, funcionó para mí. Por código solo pm.

Si estas usando ListView en Activity, asegúrese de tener la configuración setOnItemClickListener()

myListView.setOnItemClickListener(this); // if your activity implement OnItemClickListener
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top