Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何保持gridview(或ListView)项目处于选中状态,而不因回收而丢失选择_Android_Listview_Gridview - Fatal编程技术网

Android 如何保持gridview(或ListView)项目处于选中状态,而不因回收而丢失选择

Android 如何保持gridview(或ListView)项目处于选中状态,而不因回收而丢失选择,android,listview,gridview,Android,Listview,Gridview,我经常遇到一个问题,就是在listView(当前是gridview)中选择的项目保持选中状态。我正在使用BaseAdapter。我对holder模式的工作原理有一个大致的了解,但我不太确定应该如何保存每个特定视图的状态。这是是否单击的状态。我应该创建另一个类作为模型,还是应该使用getTag和setTag? 谢谢你的帮助。 干杯诀窍是不要担心保存视图的状态。而是保存/更改基础数据的状态。因此,如果选择了一个位置,请将该位置放置在数据结构中(通常是SparseBooleanArray)。当此位置返

我经常遇到一个问题,就是在listView(当前是gridview)中选择的项目保持选中状态。我正在使用BaseAdapter。我对holder模式的工作原理有一个大致的了解,但我不太确定应该如何保存每个特定视图的状态。这是是否单击的状态。我应该创建另一个类作为模型,还是应该使用getTag和setTag? 谢谢你的帮助。
干杯

诀窍是不要担心保存视图的状态。而是保存/更改基础数据的状态。因此,如果选择了一个位置,请将该位置放置在数据结构中(通常是SparseBooleanArray)。当此位置返回视图时,即为此位置调用getView(),请相应地更新视图属性。

感谢您的帮助,我现在就来试一试。另外,我正在通过调用view.setBackgroundColor更改背景颜色,是否可以使用?@LonelyVagrant当然可以。但一定要重置背景色。示例if(selected){view.setBackgroundColor(selectedColor);}else{view.setBackgroundColor(normalColor);}。else语句在这里很重要。另一方面,我会记住,即使某些物品不是手帕,也会被选中。这实际上可能是我过去的问题。谢谢大家,我成功地让它工作了。虽然我失去了一些功能,因为我需要访问调用适配器类的类中的SparseBooleanArray。将SparseBooleanArray从适配器发送到其调用类的正确方法是什么?我有上下文,所以我应该使用cast并从调用类调用方法吗?例如((classthattcallsadapter)上下文)?再次感谢大家对这些初学者问题的帮助。@LonelyVagrant我更愿意使用一个界面,在活动和适配器之间打开一个通信通道。但是,通常的实现如下:我假设您的活动中有一个
MultiChoiceModeListener
的实现。然后,SparseBooleanArray应该是适配器的成员。当某些内容被选中/取消选中时,调用
mAdapter.setPositionToChecked(position)
。您需要将此方法添加到适配器以切换该位置的选择状态。