Java ListView中具有奇数检查行为的复选框
我不熟悉Java和Andriod开发 我的应用程序中有一个包含ListView的视图 然后我有一个从ArrayAdapter继承的自定义适配器 在getView方法的视图中,我返回一行,其中包含一些文本和一个复选框 到目前为止,这一切都很好。我的列表已填充,我可以检查我的项目,所有事件似乎都按预期进行 我的问题是,我检查了前3个项目,然后我注意到第11、12和13个项目被选中,当我滚动时,我看到其他复选框也以相同的模式定期被选中 如果我选中大约10个复选框,那么它将最终选中大约80个列表中的所有项目 谁能解释一下我做错了什么 我不认为任何代码会帮助解释这一点,因为我没有在任何地方设置复选框的checkstate,这都是自己处理的,所以检查项目的事实让我感到困惑Java ListView中具有奇数检查行为的复选框,java,android,android-listview,android-checkbox,Java,Android,Android Listview,Android Checkbox,我不熟悉Java和Andriod开发 我的应用程序中有一个包含ListView的视图 然后我有一个从ArrayAdapter继承的自定义适配器 在getView方法的视图中,我返回一行,其中包含一些文本和一个复选框 到目前为止,这一切都很好。我的列表已填充,我可以检查我的项目,所有事件似乎都按预期进行 我的问题是,我检查了前3个项目,然后我注意到第11、12和13个项目被选中,当我滚动时,我看到其他复选框也以相同的模式定期被选中 如果我选中大约10个复选框,那么它将最终选中大约80个列表中的所有
提前感谢之所以会发生这种情况,是因为Android会出于性能目的回收列表项,下面是此问题的解决方案:
希望能提供帮助:)之所以会发生这种情况,是因为Android会出于性能目的回收列表项,下面是此问题的解决方案:
希望能有所帮助:)这是预期的行为。ListView重用适配器中的视图。 因此,您需要保留一组“选定项目”,并在单击
复选框时添加或删除项目,然后在getView中添加以下代码:
if(mSelected.contains(getItem(position)) {
checkBox.setChecked(true);
} else {
checkBox.setChecked(false);
}
这样,当重新使用行时,复选框将处于正确的状态。这是预期的行为。ListView重用适配器中的视图。
因此,您需要保留一组“选定项目”,并在单击复选框时添加或删除项目,然后在getView中添加以下代码:
if(mSelected.contains(getItem(position)) {
checkBox.setChecked(true);
} else {
checkBox.setChecked(false);
}
这样,当重新使用该行时,复选框将处于正确状态。如果有任何不清楚的地方,请询问,我将尽我所能作出回应:如果您将getView方法的代码放在DIf中,我可以准确地告诉您问题发生的位置;)任何不清楚的问题,请询问,我将尽我所能作出回应:DIf如果您将getView方法的代码放入,我可以告诉您问题发生的确切位置;)非常感谢将签出,然后根据需要标记:)非常感谢将签出,然后根据需要标记:)