0

我想在单击 Button 时从Custom ListView中选择所有CheckBox 。

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

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

2 回答 2

3

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

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

我建议你研究这篇博文,这里作者维护 Checked 状态,然后在getView()适配器中相应地设置它。

作者创建了一个这样的布尔数组:

private boolean[] thumbnailsselection;

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

这是另一个帖子

于 2012-12-31T10:16:06.897 回答
0

You should NOT hold references of individual views for this purpose, as they are recycled.

For your convenience, ListView holds a BooleanSparseArray to store what items are checked. This array contains a map of item id (index/position of items in adapter) to a boolean value.

Since ListView does all that for you, its good to avoid re-inventing the wheel and use ListView's capability to hold checked state of its items. All you have to do is to set a choice mode for ListView: setChoiceMode(int choiceMode)

于 2012-12-31T10:54:41.273 回答