Android RecyclerView恢复到浏览位置

前言:当离开当前Recyclerview跳转到另一个界面时,为了用户体验,很多app如微博都会记录下当前的浏览item位置,以方便跳转回来的时候自动恢复到上次浏览位置。

Android RecyclerView恢复到浏览位置_第1张图片

解决方案:Fragmengt布局里面放置RecyclerView

1、首先在onSaveInstanceState()里面保存离开RecyclerView界面时的位置position

    /*
     *  保存离开Fragment时的浏览位置
     */
    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);

        if(layoutManager==null)
           layoutManager = new LinearLayoutManager(getContext());

        //返回当前RecycelrView中第一个可见的item的位置
        int position = layoutManager.findFirstVisibleItemPosition();
        outState.putInt("leavePosition",position);

        //获取与该view的顶部的偏移量
        int offset = 0;
        View currentView = layoutManager.findViewByPosition(position);
        if(currentView!=null)
        {
            offset = currentView.getTop();
        }
        outState.putInt("offset",offset);

    }

2、LinearLayoutManager的scrollToPositionWithOffset(int position,int offset)

     position表示滑动到指定item,offset表示item距离顶部的距离

   //滑动至上次离开时的浏览位置
      if (mySavedInstanceState!=null)
      {
          int leavePosition = mySavedInstanceState.getInt("leavePosition");
          int offset = mySavedInstanceState.getInt("offset");
          layoutManager.scrollToPositionWithOffset(leavePosition,offset);
      }

     *:定位到指定项,当offset为0时如果该项可以置顶就将其置顶显示


  3、参考文档

  记录RecyclerView滚动位置并恢复

  RecyclerView入门学习之LayoutManager


你可能感兴趣的:(Android)