在arrayadapter中更新数据后列出视图返回顶部位置

时间:2012-03-26 11:06:37

标签: android listview android-arrayadapter

我有一个listview,使用XML解析每5秒刷新一次。刷新后,列表的当前位置返回到第一个位置。有没有办法解决这个问题?

4 个答案:

答案 0 :(得分:5)

通过使用setAdapter()更新列表,Android会重置位置。请尝试改变适配器。

我不知道你正在使用哪个适配器,所以这里有两个例子。

ArrayAdapter

adapter = list.getAdapter();
if (adapter == null) {
    // Create new adapter + list.setAdapter()
} else {
    adapter.clear();
    adapter.addAll(newData);
    adapter.notify(notifyDataSetChanged());
}

的CursorAdapter

adapter.changeCursor(newCursor);

答案 1 :(得分:3)

使用lv.smoothScrollToPosition(pos)其中pos可以是任何int,最好是适配器的长度,如果你希望listview autoscroll 到最后添加的条目,因为它被刷新。

public void smoothScrollToPosition (int position) 


Smoothly scroll to the specified adapter position. The view will scroll such that the indicated position is displayed.

答案 2 :(得分:2)

此代码可以帮助您....

// get position of listview
int index = listView.getFirstVisiblePosition();
View v = listView.getChildAt(0);
int top = (v == null) ? 0 : v.getTop();

// notify dataset changed or re-assign adapter here

//re-assign the position of listview after setting the adapter again
listView.setSelectionFromTop(index, top);

干杯:)

答案 3 :(得分:-1)

试试这个

adapter.notifyDataSetChanged();