studio android listview checkbox android-listview onitemclicklistener

studio - android listview checkbox get checked items



El clic de Listitem no funciona con casillas de verificación Android (3)

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

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

View#hasFocusable AbsListView View#hasFocusable y no permitirá presiones sobre el elemento si es así. Por lo tanto, deshabilite el enfoque en todos los elementos normalmente enfocables.

EDITAR (RESUELTO) Para la respuesta, vaya al final de la pregunta.

Tengo una vista de lista e inflico algunas filas con un customadapter. La fila que se está inflando contiene una casilla de verificación. Puedo mantener el estado de la casilla de verificación, pero el problema es que mis elementos de la lista ya no se pueden hacer clic. 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 se pueda hacer clic en los elementos de la lista en caso de que el usuario solo quiera hacer clic en un solo elemento.

EDITAR (a petición de Akhil) - preann2.xml en la carpeta de diseños:

<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 de diseños:

<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>

EDITAR (SOLUCIONADO) Simplemente agregue estas propiedades a la casilla de verificación:

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


No entendí bien su problema. Mire aquí su problema. Espero que resuelva su problema.


Use esta línea en la vista raíz del elemento de la lista
android: descenddantFocusability = "bloquesDescendientes"