【发布时间】:2011-05-31 23:47:36
【问题描述】:
我想禁用/启用列表视图中的所有复选框。事实上,希望通过单击顶部复选框来选择所有行为。
谢谢
【问题讨论】:
我想禁用/启用列表视图中的所有复选框。事实上,希望通过单击顶部复选框来选择所有行为。
谢谢
【问题讨论】:
for(int i=0; i < listView.getChildCount(); i++){
RelativeLayout itemLayout = (RelativeLayout)listView.getChildAt(i);
CheckBox cb = (CheckBox)itemLayout.findViewById(R.id.MyListViewCheckBox);
cb.setChecked(true);
}
您需要编辑此代码以处理启用和禁用,但我希望您明白这一点!
此外,这只检查每个复选框,确保您从列表中返回一个 id 或对象,以便将数据发送/保存到其他地方。
【讨论】:
这最终对我有用,我使用光标适配器,而不仅仅是 ArrayListAdapter 用于我的列表项:
final ListView list = getListView();
for ( int i=0; i< getListAdapter().getCount(); i++ ) {
list.setItemChecked(i, true);
}
list.getChildCount 不起作用,因为它似乎只计算立即绘制的内容(而不是屏幕外的所有内容),因此当整个列表包含 100 个或更多项目时,childCount 可能只有 6 或 8 个项目。另外,因为我必须使用 list.setItemChecked 来让项目“保持检查”——至少在我的列表项目是 CheckedTextView 的实例的情况下。
【讨论】:
只需在适配器中添加一个参数为
Boolean Ex.MyAdapter adapter = new Save_Weight_Adapter(this, R.layout.layoutname, array, false);
listview.setAdapter(adapter);
在选择所有按钮单击监听器时添加此代码
MyAdapter adapter = new Save_Weight_Adapter(this, R.layout.layoutname, array, true);
listview.setAdapter(adapter);
并签入适配器
if(chk) {
blue_check.setVisibility(View.VISIBLE);
} else {
blue_check.setVisibility(View.GONE);
}
【讨论】:
我认为您应该在 UI 线程之外运行这个长时间运行的任务。当您单击 OnClickListener 中的按钮时:
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < list.getAdapter().getCount(); i++) {
final int position = i;
mHandler.post(new Runnable() {
@Override
public void run() {
list.setItemChecked(pos, true);
}
});
}
}
}).start();
在 onCreate() 中:
this.mHandler = new Handler();
列表视图中的每个项目都应该是 Checkable ,就像实现 Checkable 接口的 CheckableRelativeLayout 一样。
【讨论】: