猿问

返回到ListView时维护/保存/还原滚动位置

返回到ListView时维护/保存/还原滚动位置

我有很长的时间ListView在返回到前一个屏幕之前,用户可以滚动。当用户打开以下内容时ListView同样,我希望将列表滚动到与以前相同的位置。对于如何实现这一点,有什么想法吗?



繁花不似锦
浏览 520回答 3
3回答

慕慕森

试试这个:// save index and top positionint index = mList.getFirstVisiblePosition();View v = mList.getChildAt(0);int top = (v == null) ? 0 :  (v.getTop() - mList.getPaddingTop());// ...// restore index and positionmList.setSelectionFromTop(index, top);说明:ListView.getFirstVisiblePosition()返回顶部可见列表项。但是,这一项可能会部分脱离视图,如果您想恢复列表的确切滚动位置,则需要获得此偏移量。所以ListView.getChildAt(0)返回View对于最重要的列表项,然后View.getTop() - mList.getPaddingTop()控件顶部返回其相对偏移量。ListView..然后,恢复ListView的滚动位置,我们调用ListView.setSelectionFromTop()使用我们想要的项的索引和一个偏移量将其顶部边缘从ListView.

MYYA

Parcelable state;@Overridepublic void onPause() {         // Save ListView state @ onPause     Log.d(TAG, "saving listview state @ onPause");     state = listView.onSaveInstanceState();     super.onPause();}...@Overridepublic void onViewCreated(final View view, Bundle savedInstanceState) {     super.onViewCreated(view, savedInstanceState);     // Set new items     listView.setAdapter(adapter);     ...     // Restore previous state (including selected item index and scroll position)     if(state != null) {         Log.d(TAG, "trying to restore listview state..");         listView.onRestoreInstanceState(state);     }}
随时随地看视频慕课网APP

相关分类

Android
我要回答