大概的代码如下:
private final LinkedList<Integer> mPositionsList = new LinkedList<Integer>();
private final LinkedList<Integer> mHeightsList = new LinkedList<Integer>();
......
......
在 onItemClick(AdapterView<?> parent, View view, int position, long id) 中记录点击的位置,以及相对第一行的位置,
int iFirstPosition = mListView.getFirstVisiblePosition() == 0 ? -1 : mListView
.getFirstVisiblePosition();
int mToTopHeight = (position - iFirstPosition)
* (view.getHeight() + mListView.getDividerHeight())
- mListView.getDividerHeight();
mPositionsList.add(position);
mHeightsList.add(mToTopHeight);
......
......
在需要恢复的位置上添加以下代码:
mListView.setSelectionFromTop(mPositionsList.getLast(), mHeightsList.getLast());
mPositionsList.removeLast();
mHeightsList.removeLast();
当前位置相对于第一个可显示的位置的高度是:
(当前位置 - 第一个显示在Listview中的位置) * (item 项高 + 分隔符高) - 一个分隔符的高度
在恢复位置时调用:
mListView.setSelectionFromTop(mPositionsList.getLast(), mHeightsList.getLast());