【发布时间】:2016-08-23 21:56:10
【问题描述】:
给定 ListActivity 和 ListView 以及根据用户输入更改项目的要求,如何进行更改以使更改在滚动后仍然存在?
当前应用程序使用由数据库中的Cursor 填充的ResourceCursorAdapter。当用户长按某个项目时,该项目上的ImageView 在View.VISIBLE 和View.GONE 之间切换。此外,数据库中支持视图状态的标志也被管理。
但是,当该项目从屏幕上滚出,然后又回到屏幕上时,该项目会显示为没有最近的更改。换句话说,如果我通过长按使ImageView 可见,它显示得很好。但是当我滚动离开该项目,然后滚动回到它时,它不再可见。
我当前的解决方案(我认为是错误)是保存滚动位置,从数据库中刷新整个列表,然后再次定位到正确的位置。
我想有一些方法可以告诉一些 Android 的东西将新的可见性状态放入它的缓存中,但我找不到它。我试过setScrollingCacheEnabled(false),还有其他一些缓存是错误的,但这些似乎都没有什么不同。我试图弄清楚如何让 Android 意识到它是“脏”的,但我发现的只是查询它是否为isDirty()。我还尝试了ResourceCursorAdapter.notifyDataSetChanged(),这使得setVisibility() 调用对可见性无效。我还在各个地方尝试过invalidate() 和invalidateViews()。如果以正确的顺序(在可见性更改之前或之后)应用于正确的对象,则其中之一可能会起作用。
【问题讨论】:
-
当用户长按任意行时,您是否正在更改数据?您应该更改数据模型,以便下次根据新的数据模型类扩展该行。 ...
-
ListView功能的首选方法现在是RecylcerView。这里的答案包含管理列表的详细信息,该列表管理使用首选方法实现的列表中的用户更改数据:stackoverflow.com/a/40568269/897007
标签: android listview android-scrolling