ListView停止滚动不起作用

时间:2012-03-19 10:28:17

标签: android android-listview

我已经制作了自定义适配器并调用notifyDataSetChanged()然后进行数据更新。但是在调用notifyDataSetChanged()后我无法通过触摸停止滚动listview。 我查看了android的源代码,发现文件中的代码为AbsListView.class(它是ListView的父代)

if (!mDataChanged) { ... }

有一个代码可以停止在触摸事件上滚动ListView。

然后我们调用notifyDataSetChanged(),我们将mDataChanged设置为true,因此无法停止滚动。

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

2 个答案:

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

其中,indextop_listview是任何方法都可以访问的字段。

答案 1 :(得分:0)

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