我正在尝试从数组初始化复选框列表视图。 为此,我循环遍历listview项目并检查项目是否存在,如果存在,则将其设置为选中。事情是它没有按预期工作。在内部一切正常,结果数组是正确的,但在视觉上它不会显示正确状态的复选框。
这是初始化复选框的函数,它由onCreate和onResume方法调用。
public void init()
{
View v;
CheckBox checkbox;
for (int i = 0; i < LIST.getCount(); i++) {
v = LIST.getAdapter().getView(i, null, null);
checkbox = (CheckBox)v.findViewById(R.id.checkbox);
MyClass c = (MyClass) adapter.getItem(i);
if(List_to_compare.contains(c)) {
Log.i("Before", String.valueOf(checkbox.isChecked())); //returns false
checkbox.setChecked(true);
Log.i("After", String.valueOf(checkbox.isChecked())); //returns true
}
}
}
但是没有目测检查复选框。如果需要更多的代码,让我知道,真的很难与这个代码挣扎。
答案 0 :(得分:1)
你正在做的事情不会起作用。
当您致电getView()
并更改视图时,ListView
无法更改该视图。 ListView
本身会调用getView()
来呈现列表项,并且它会忽略您已经完成的任何事情。
以下是如何修复它:
您将在适配器中覆盖 getView()
,而不是调用getView()
,而是拥有以下代码行:
checkbox = (CheckBox)v.findViewById(R.id.checkbox);
MyClass c = (MyClass) getItem(position);
checkbox.setChecked(List_to_compare.contains(c));
为了将来参考,在调用ListView
之前,应对适配器中项目的模型进行notifyDataSetChanged()
项目的任何更改,并且应在getView()
中使用该项目模型显示当前状态。