取消选中自定义ListView中的所有复选框
我试图在ListActivity中执行“取消选择所有”按钮以取消选中由自定义SimpleCursorAdapter管理的ListView中的所有复选框。取消选中自定义ListView中的所有复选框
至于建议here,我试图
在我ListActivity我:
Button bt_f_unsel = (Button) findViewById(R.id.btn_f_unsel);
bt_f_unsel.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
for (int i=0; i< getListAdapter().getCount(); i++) {
mListView.setItemChecked(i, false);
}
}
});
但没有任何反应。
我不知道这是否是因为我的自定义行:
<?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="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/contact_pic"
android:layout_width="50dp"
android:layout_height="50dp" />
<TextView
android:id="@+id/contact_name"
android:textSize="10sp"
android:singleLine="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<CheckBox
android:id="@+id/checkbox"
android:button="@drawable/whipem_cb"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
这使得mListView.setItemChecked()找不到复选框。
如何取消选中所有cb并刷新ListActivity中按钮的所有行?
谢谢
老实说,我不认为setChecked方法将与自定义布局一起工作。它期望该视图是一个ID为text1的CheckedTextView。
由于视图被回收,我认为解决方案是更新列表中对象中的任何布尔值,以确定复选框是否被选中,然后调用adapter.notifyDataSetChanged()
。您正在更改数据的布尔状态(这是真正重要的)并告诉适配器更新ListView。因此,下一次绘制视图时,复选框将被正确检查。并且显示的当前视图将被重绘。
我使用的是肮脏的,但容易招:
//recursive blind checks removal for everything inside a View
private void removeAllChecks(ViewGroup vg) {
View v = null;
for(int i = 0; i < vg.getChildCount(); i++){
try {
v = vg.getChildAt(i);
((CheckBox)v).setChecked(false);
}
catch(Exception e1){ //if not checkBox, null View, etc
try {
removeAllChecks((ViewGroup)v);
}
catch(Exception e2){ //v is not a view group
continue;
}
}
}
}
通过你的列表对象了。只需避免真正漫长而复杂的列表。
我用
checkbox.setChecked(false);
checkbox.refreshDrawableState();
嗨,欢迎来到Stack Overflow。如果您突出显示代码并单击“{}”按钮,它将自动为您突出显示。 – Ben 2013-08-21 21:28:08
这为我工作:
MenuViewAdapter adapter = new MenuViewAdapter(this, menuViews,this);
ListView lv = (ListView)this.findViewById(R.id.menu_list);
CheckBox cb;
for(int i=0; i<lv.getChildCount();i++)
{
cb = (CheckBox)lv.getChildAt(i).findViewById(R.id.checkBox);
cb.setChecked(false);
}
adapter.notifyDataSetChanged();
如果我们有超过100个项目,我应该怎么办?它只清除其他可见项目吗? – Google 2017-03-30 12:29:10
如果这真的是ListActivity它甚至可以工作5000. – halxinate 2017-04-20 18:50:05
可以建议在removeallchecks中传递什么?同时调用这个方法 – Panache 2018-01-26 12:28:21