为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁花不似锦 2019-06-06 14:53:25
返回到ListView时维护/保存/还原滚动位置我有很长的时间ListView在返回到前一个屏幕之前,用户可以滚动。当用户打开以下内容时ListView同样,我希望将列表滚动到与以前相同的位置。对于如何实现这一点,有什么想法吗?
查看完整描述

3 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

试试这个:

// 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.


查看完整回答
反对 回复 2019-06-06
?
MYYA

TA贡献1868条经验 获得超4个赞

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);
    }}


查看完整回答
反对 回复 2019-06-06
  • 3 回答
  • 0 关注
  • 519 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信