我已经制作了自定义适配器并调用notifyDataSetChanged()然后进行数据更新。但是在调用notifyDataSetChanged()后我无法通过触摸停止滚动listview。 我查看了android的源代码,发现文件中的代码为AbsListView.class(它是ListView的父代)
if (!mDataChanged) { ... }
有一个代码可以停止在触摸事件上滚动ListView。
然后我们调用notifyDataSetChanged(),我们将mDataChanged设置为true,因此无法停止滚动。
你可以帮助我找出如何在数据更改后启用停止滚动吗?
答案 0 :(得分:0)
您需要保存ListView
的滚动位置,并在刷新列表后再滚动列表直到该滚动量。
为此,请在adapter.notifyDataSetChanged();
private void saveListScrollPosition() {
// save index and top position
index = _listview.getFirstVisiblePosition();
View view = _listview.getChildAt(0);
top = (view == null) ? 0 : view.getTop();
}
在adapter.notifyDataSetChanged();
之后
写下以下一行 -
// restore list scroll position
_listview.setSelectionFromTop(index, top);
其中,index
,top
和_listview
是任何方法都可以访问的字段。
答案 1 :(得分:0)
可能是在ListView调用getItem
方法时读取数据。使用异步数据加载(Handler)可能是一个更好的主意。您可以在this answer中找到更多信息。