取消选中自定义 ListView 中的所有复选框
我试图在 ListActivity 中执行“取消全选”按钮,以取消选中由自定义 SimpleCursorAdapter 管理的 ListView 中的所有复选框。
正如此处所建议的,我尝试了
在我的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 中按钮的所有行?
谢谢
I'm trying to do an "Unselect all" button in a ListActivity to unchecked all checkboxes in a ListView managed by a custom SimpleCursorAdapter.
As suggested here, I tried
In my ListActivity I have:
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);
}
}
});
but nothing happens.
I'm wondering if this is because of my custom row:
<?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>
which makes mListView.setItemChecked() not find the checkbox.
How can I uncheck all cb and refresh all the rows from a button in my ListActivity?
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我正在使用一个肮脏但简单的技巧:
将您的列表对象传递给它。只是避免非常长和复杂的列表。
I'm using a dirty but easy trick:
Pass your list object to it. Just avoid really long and complicated lists.
老实说,我认为 setChecked 方法不适用于自定义布局。它期望视图是 ID 为 text1 的 CheckedTextView。
由于视图被回收,我认为解决方案是更新列表中对象中的任何布尔值,以确定是否选中复选框,然后调用
adapter.notifyDataSetChanged()
。您正在更改数据的布尔状态(这才是真正重要的)并告诉适配器更新 ListView。因此,下次绘制视图时,将正确选中该复选框。当前显示的视图将被重新绘制。Honestly I don't think the setChecked Methods will work with a custom layout. It expects the view to be a CheckedTextView with an id of text1.
And since the views are recycled I think the solution is to update whatever boolean in your objects in the list that determines if the checkbox is checked and then call
adapter.notifyDataSetChanged()
. You are changing the boolean state of the data (which is what really matters) and telling the Adapter to update the ListView. So the next time the views are drawn the checkbox will be checked correctly. And the current views that are shown will be redrawn.这对我有用:
This worked for me:
我用
I use