2012-03-19 75 views
1

我做了自定义适配器并调用notifyDataSetChanged(),然后数据更新。但是在调用notifyDataSetChanged()之后,我无法停止通过触摸来滚动listview。 我看着Android的源代码,发现在文件AbsListView.class该代码(这是ListView的母公司)ListView停止滚动不起作用

if (!mDataChanged) { ... } 

有一个代码,以停止对触摸事件滚动的ListView。

然后我们调用notifyDataSetChanged()我们将mDataChanged设置为true,所以不能停止滚动。

你能帮我找出如何在数据更改后启用停止滚动吗?

回答

0

也许您正在读取数据,而ListView调用getItem方法。使用异步数据加载(Handler)可能是一个更好的主意。你可能在this answer找到更多的信息。

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); 

其中,indextop_listview都可以访问所有领域到任何方法。

+0

你为什么认为它应该帮助?因为在代码中android检查是否(!mDataChanged){...}(但是我尝试了你的代码,但它没有帮助) – karabara 2012-03-19 11:53:40