0

我有一个ListView使用自定义布局的自定义布局,该布局在自定义布局中有 5 个子View对象(4TextView和 1 CheckBox)。但是,只有TextViews绑定 -CheckBox数据库中没有相应的字段。的目的CheckBox只是确定我想在“下一步”中处理哪些正在显示的项目。我正在使用自定义ViewBinder来正确分配文本值(因为数据库中的一些值是日期等)。

用户界面的一部分是三个按钮——“全部”、“无”和“反转”,我用它们来切换列表中每个项目的状态。例如,对于“全部”按钮,我使用以下代码执行此操作(我现在知道这是不正确的 - 我包含它以显示我正在尝试做的事情):

ListAdapter la = getListAdapter();
ListView lv = getListView();
int iCount = la.getCount();
for(int i=0; i<iCount; i++)
{
    View vv = lv.getChildAt(i);
    CheckBox cb = (CheckBox) vv.findViewById(R.id.ledgerItemCheckBox);
    cb.setChecked(true);
}

只要列表中的项目数不超过列表大小,这样就可以正常工作,以便所有项目始终可见。但是,当我超过该数字时,“getChildAt”函数有时会返回 null,因为(如果我理解正确的话)它并不意味着返回列表中的所有项目,只返回那些可见的项目,这会导致NullPointerException.

CheckBox即使它们不可见,如何正确设置所有视图?

4

1 回答 1

1

创建一个到您的 TextView 数据的伪绑定,创建一个布尔对象的 ArrayList 作为复选框的后端。请注意,ArrayList 可能不是您的应用程序的最佳数据结构。使用设置为光标数据集相应位置的初始值的布尔值填充 ArrayList。绑定时,使用 ArrayList 作为后端数据。当您选择全部、无或反转时,更新 ArrayList 中的布尔对象,然后在您的 SimpleCursorAdapter 上调用 notifyDataSetChanged()。

补充啊,问题的另一半,是的,CheckBoxes使用onClickListener但使用相同的监听器,不要为每个创建一个新对象。使用getPositionForView()方法获取您的位置并更新基础数据。

于 2011-09-11T02:05:28.410 回答