自定义列表视图中的复选框问题

时间:2012-12-31 10:08:42

标签: android android-layout checkbox

我想在单击按钮时从自定义列表视图中选择所有 CheckBox

但是当我在ListView中有超过9个项目时,我在第二行代码中得到NullPointerException。

View vi= diffeneceLv.getChildAt(i);
CheckBox cb = (CheckBox) vi.findViewById(R.id.conschkbx);

2 个答案:

答案 0 :(得分:3)

你弄错了,ListView重新使用你的行,这意味着内存中创建的行/布局数量不等于数组中的项目。

通常ListView会在滚动时将新数据重新设置为上一行。

我建议你学习this blog post,这里作者正在维护Checked状态,然后在适配器的getView()中相应地设置它。

作者创建了一个像这样的bolean数组:

private boolean[] thumbnailsselection;

并存储检查或取消选中的状态,稍后从getView()访问它,您将执行的操作是,您将为所有索引存储true并刷新适配器。它会选择你所有的行。

这是another post

答案 1 :(得分:0)

您不应为此目的持有个别观点的参考资料,因为它们会被回收。

为方便起见,ListView持有BooleanSparseArray来存储检查的项目。此数组包含项ID(适配器中的项的索引/位置)到布尔值的映射。

由于ListView会为您完成所有这些工作,因此避免重新发明轮子,并使用ListView的功能来保持其项目的已检查状态。您所要做的就是为ListView设置一个选择模式:setChoiceMode(int choiceMode)