Android 使用NOTIFYDATASETCHENGED更新listview项后,将丢失列表项的当前选择

Android 使用NOTIFYDATASETCHENGED更新listview项后,将丢失列表项的当前选择,android,android-widget,Android,Android Widget,我需要每秒刷新ListView项,使用notifyDataSetChanged()可以正常工作。刷新后,列表中已选定的项将丢失其选择。即,它将丢失其选定的项目背景。每次刷新后,如何维护已选项目的选定状态 提前感谢您的支持。可能是回收的问题。如果您想按时间间隔刷新视图,可以使用notifyDataSetChanged()。但您必须保持listview的状态 例如,您选择了第二个位置,现在当您滚动listview或刷新适配器时,所选位置的状态将消失。因此,您必须为所选项目的位置维护一个数组,以便在g

我需要每秒刷新ListView项,使用notifyDataSetChanged()可以正常工作。刷新后,列表中已选定的项将丢失其选择。即,它将丢失其选定的项目背景。每次刷新后,如何维护已选项目的选定状态


提前感谢您的支持。

可能是
回收的问题。
如果您想按时间间隔刷新视图,可以使用
notifyDataSetChanged()。
但您必须保持listview的状态

例如,您选择了第二个位置,现在当您滚动listview或刷新适配器时,所选位置的状态将消失。因此,您必须为所选项目的位置维护一个数组,以便在
getView()中
Listview的方法,您可以检查数组是否包含位置。如果数组包含表示此项目已被选中的位置,则可以根据该位置更改控件值,如果数组不包含表示该项目未被选中的值

另外,如果您使用checkbox或radio或other来显示列表视图的选择,那么您必须实现类似于checkbox的事件,如
checkbox.setOnCheckedChangeListener()
checkbox.setonClickListener()
与radio相同,并且在这种情况下,您必须维护所选项目的数组


首先,您必须检查阵列是否包含所选位置?如果不包含,则在数组中添加该位置,如果是,则从数组中删除该位置并刷新适配器。

据我所知,您的问题是,刷新ListView后,您将丢失ListView的选定项焦点。因此,您可以使用
ListView的setSelection()方法来设置ListView中的选定项。因此,在此之后刷新列表视图时,可以使用
setSelection()设置要选择的项目或上一个选择的项目。


这里的
position
notifyDataSetChanged()

之前最后选择的索引位置,我认为用户在这里没有复选框问题。用户询问在引用ListView后所选项目是否被刷新。感谢您的输入Dharmendra。但是,正如Lalit所评论的,我需要在刷新后返回并在ListView中突出显示所选项目。谢谢Lalit。我试过你的解决办法。它仅在上下键操作中被选中,而不是在触摸/点击项目时被选中。我们如何才能实现同样的目标?此外,在选择时,文本的字幕效果也不会出现。请在这方面提供帮助。嗯,我想你有一个自定义列表视图,对吗?。如果是,那么您必须将android:focusable=“false”添加到其他视图以使ListView可单击。是的,我有一个自定义ListView。你所说的其他视图是什么意思?-布局中包含ListView的其他视图,或者列表项的自定义布局中的视图?另外,我们不需要为ListView实现setOnItemClickListener()吗?其他视图=您拥有的ListView行的视图。不工作:(但是,setOnItemClickListener()实现如何?
listView.setSelection(position)