更改列表项目点击checkbox状态?

我有一个列表和每一行中的checkbox。 我希望当我点击一行时,checkbox会相应地改变它的状态。

checkbox.xml

<CheckBox android:id="@+id/CheckBox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:focusable="false" android:text="" /> 

点击我的列表监听器

 protected void onListItemClick(ListView l, View v, int position, long id) { Toast.makeText(getApplicationContext(), "You have selected item no." + (position + 1) + "", Toast.LENGTH_SHORT).show(); super.onListItemClick(l, v, position, id); selectedRow = position; if (v == null) { LayoutInflater lif = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = lif.inflate(R.layout.posting_detail_question_row, null); } if (checkedTextView.isChecked()) { Toast.makeText(getApplicationContext(), "Already voted", Toast.LENGTH_SHORT).show(); } else { String[] from = {"option", "votes"}; // values to fetch from // hashmap int[] to = {R.id.option, R.id.votes}; // id's for the view SimpleAdapter adp = new SimpleAdapter(getApplicationContext(), hashList, R.layout.posting_detail_question_row, from, to); setListAdapter(adp); checkedTextView.setChecked(true); } } 

posting_detail_question_row.xml

 <?xml version="1.0" encoding="UTF-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="40dp" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="fill_parent" android:background="@drawable/poll_border_top_bg" android:orientation="horizontal"> <TextView android:id="@+id/option" android:layout_width="0dp" android:layout_height="fill_parent" android:layout_marginLeft="10dp" android:layout_weight=".3" android:gravity="center_vertical" android:text="Answer 1" android:textColor="#333333" android:textSize="15sp" /> <TextView android:id="@+id/votes" android:layout_width="0dp" android:layout_height="fill_parent" android:layout_marginLeft="10dp" android:layout_weight="1" android:gravity="center_vertical" android:textColor="#333333" android:textSize="15sp" /> <CheckBox android:id="@+id/CheckBox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:focusable="false" android:text="" /> </LinearLayout> </LinearLayout> 

我的适配器是一个SimpleAdapter:

  SimpleAdapter adp = new SimpleAdapter(getApplicationContext(), hashList, R.layout.posting_detail_question_row, from, to); Log.v("MyLog", "after simple adapter"); setListAdapter(adp); 

Related of "更改列表项目点击checkbox状态?"

您需要使用findViewById来获取指向您checkbox的指针:

 protected void onListItemClick(ListView l, View v, int position, long id) { Toast.makeText(getApplicationContext(), "You have selected item no." +(position+1)+"", Toast.LENGTH_SHORT).show(); super.onListItemClick(l, v, position, id); if (v != null) { CheckBox checkBox = (CheckBox)v.findViewById(R.id.Checkbox); checkBox.setChecked(!checkBox.isChecked()); } } 

如果您收到onClick事件,则v不应该为空,但我已经进行了相应的检查。

在onListItemClick里面这样做:

 CheckBox cb = (CheckBox) v.findViewById(R.id.CheckBox); cb.setChecked(!cd.isChecked()); 
 CheckBox checkBox = (CheckBox) v.findViewById(R.id.CheckBox); checkBox.setChecked(true); 

下面是完整的代码,你可以在设置addapter之后添加这个代码:

 list.setOnItemClickListener(new AdapterView.OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String message = "Item " + position; Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show(); CheckBox cb = (CheckBox) view.findViewById(R.id.checkbox); cb.setChecked(!cb.isChecked()); } });