El clic de Listitem no funciona con las casillas de verificación Android

EDIT (SOLVED) Para la respuesta ir al fondo de la pregunta.

Tengo un listview y hinco algunas filas en él usando un customadapter. La fila que está inflada contiene una casilla de verificación. Puedo mantener el estado de la casilla de verificación, pero el problema es que mis elementos de lista no son más accesibles. Aquí está mi código:

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); fl=(ListView)findViewById(R.id.MainMenu);//Mainmenu is listview fl.setAdapter(new CustomAdapter(Annotate.this,R.layout.preann2,_dir));//preann2 is row and _dir is the list of objects //fl.setOnItemClickListener(this); tried this too } public void onItemClick(AdapterView<?> a, View view, int pos, long id) { //Implementations } public class CustomAdapter extends ArrayAdapter<String> { public CustomAdapter(Context context, int textViewResourceId,String[] objects) { super(context, textViewResourceId,objects); } @Override public View getView(final int position, View convertView, ViewGroup parent) { LayoutInflater inflater=getLayoutInflater(); View row=inflater.inflate(R.layout.preann2, parent, false); try { TextView Name=(TextView)row.findViewById(R.id.title); Name.setText("xyz"); ImageView icon=(ImageView)row.findViewById(R.id.icon); row.setFocusable(true); row.setClickable(true); row.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub checkState[position]=!checkState[position]; } }); CheckBox c=(CheckBox)row.findViewById(R.id.checkBox); c.setChecked(checkState[position]); c.setOnCheckedChangeListener(new OnCheckedChangeListener(){ @Override public void onCheckedChanged(CompoundButton v, boolean isChecked) { // TODO Auto-generated method stub CheckBox checkBox=(CheckBox)v; if (isChecked) { checkState[position]=true; } else checkState[position]=false; } }); /* tried this too c.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { CheckBox checkBox=(CheckBox)v; if (checkBox.isChecked()) { //checkBox.setChecked(false); checkState[position]=true; } else checkState[position]=false; }});*/ icon.setImageResource(R.drawable.ic_launcher); }catch(Throwable err) { err.printStackTrace(); } return row; } } 

Quiero que los listitems para ser clicable en caso de que el usuario quiere hacer clic en un solo elemento.

EDIT (a solicitud de Akhil) – preann2.xml en la carpeta layouts:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="4dip" > <ImageView android:id="@+id/icon" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_alignParentTop="true" android:layout_alignParentBottom="true" android:layout_marginRight="4dip"/> <TextView android:id="@+id/title" android:layout_width="fill_parent" android:layout_height="match_parent" android:layout_weight="1" android:ellipsize="end" android:gravity="center_vertical" android:singleLine="true" android:textStyle="bold" /> <CheckBox android:id="@+id/checkBox" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> 

Main.xml en la carpeta layouts:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ListView android:id="@+id/MainMenu" android:layout_width="match_parent" android:layout_height="match_parent" > </ListView> </LinearLayout> 

EDIT (SOLVED) Sólo tiene que añadir estas propiedades a la casilla de verificación:

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

La solución mencionada en la pregunta resuelve el problema:

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

AbsListView comprueba la View#hasFocusable y no permitirá presionar el elemento si es así. Por lo tanto, desactivar el enfoque en todos los elementos normalmente se pueden enfocar.

Utilice esta línea en el rootView del elemento de lista
Android: descendantFocusability = "blocksDescendants"

Hice malentendido su problema .. por favor, eche un vistazo aquí para su problema .. espero que va a resolver su problema ..

  • Cómo obtener los elementos de la lista seleccionada de un Listview con checkBox y Adaptador personalizado?
  • Cómo cambiar la casilla de verificación tick color en android
  • Creación de una casilla de verificación de tres estados en android
  • Cambiar el valor de la casilla de verificación sin activar onCheckChanged
  • Cómo tachar los elementos de texto en listview cuando está marcada?
  • Android: ¿Cómo puedo comprobar un elemento en particular en CheckView ListView?
  • ¿Cómo acceder a la marca de verificación en el sistema operativo Android?
  • Cómo desmarcar una casilla de verificación de Android marcada
  • Estado de comprobación de ListView Viewholder
  • Cómo puedo obtener todos los elementos de la lista seleccionada mediante la casilla de verificación
  • Proceso de verificación de números móviles de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.