CheckBox isCheked返回true但未在视觉上检查

时间:2015-12-28 00:03:39

标签: android listview checkbox

我正在尝试从数组初始化复选框列表视图。 为此,我循环遍历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
        }
    }
}

但是没有目测检查复选框。如果需要更多的代码,让我知道,真的很难与这个代码挣扎。

1 个答案:

答案 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()中使用该项目模型显示当前状态。