android 記錄和恢復ListView滾動的位置 四種方法
阿新 • • 發佈:2019-01-09
方法1
setOnScorllListener方法,記錄滑動位置
方法2 setOnScorllListener方法,記錄滑動的position
方法四 Google推薦的方法:
listview的getScrollY()方法返回0 可以用這個方法獲取
最後 listView.scrollTo(0, getScrollY());
恢復時使用: listView.scrollTo(scrolledX, scrolledY);listView.setOnScrollListener(new OnScrollListener() { /** * 滾動狀態改變時呼叫 */ @Override public void onScrollStateChanged(AbsListView view, int scrollState) { // 不滾動時儲存當前滾動到的位置 if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) { if (currentMenuInfo != null) { scrolledX = statusListView.getScrollX(); scrolledY = statusListView.getScrollY(); } } } /** * 滾動時呼叫 */ @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { } });
方法2 setOnScorllListener方法,記錄滑動的position
恢復時呼叫:listView.setSelection(position); 方法三 讓介面卡和List關聯起來(初次理解可能會有點難,但理解之後,你會發現很好用)listView.setOnScrollListener(new OnScrollListener() { /** * 滾動狀態改變時呼叫 */ @Override public void onScrollStateChanged(AbsListView view, int scrollState) { // 不滾動時儲存當前滾動到的位置 if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) { position = statusListView.getFirstVisiblePosition(); } } /** * 滾動時呼叫 */ @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { } });
listView.setAdapter(listDataAdapter);
listDataAdapter.getDataList.removeAll(newRemoveList());
listDataAdapter.getDataList.addAll(newDataList());
listDataAdapter.notifyDataSetChanged();
這種適用於listView追加資料的情況,嚴格說不是恢復listView滾動的位置,只是保持滾動位置不變方法四 Google推薦的方法:
// save index and top position
int index = mList.getFirstVisiblePosition();
View v = mList.getChildAt(0);
int top = (v == null) ? 0 : v.getTop();
// ...
// restore
mList.setSelectionFromTop(index, top);
方法5
和方法一類似
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/0924/1711.htmllistview的getScrollY()方法返回0 可以用這個方法獲取
public int getScrollY() {
View c = mListView.getChildAt(0);
if(c == null) {
return0;
}
int firstVisiblePosition = mListView.getFirstVisiblePosition();
int top = c.getTop();
return-top + firstVisiblePosition * c.getHeight() ;
}
最後 listView.scrollTo(0, getScrollY());