【问题标题】:RecyclerView saving stateRecyclerView保存状态
【发布时间】:2014-12-02 18:48:14
【问题描述】:

有人遇到 RecyclerView 在更改方向后不保存滚动位置的问题吗?

mMyAdapter = new MyAdapter(context, MyAdapter.generateKey(this), savedInstanceState);
mMyAdapter.setHasStableIds(true);

mLayoutManager = new LinearLayoutManager(context, VERTICAL, false);
int padding = ResourceUtils.dp2px(context, 8);
mRecycleView.setClipToPadding(false);
mRecycleView.setPadding(0, ResourceUtils.getPixelSize(R.dimen.toolbar_height), 0, padding);
mRecycleView.setOverScrollMode(View.OVER_SCROLL_ALWAYS);
mRecycleView.setLayoutManager(mLayoutManager);
mRecycleView.setAdapter(MyAdapter);
mRecycleView.setHasFixedSize(false);
mRecycleView.setOnScrollListener(mScrollManager); // only to hide Toolbar on scroll

所以我没有修改onDestroyOnSaveInstanceState 方法,只保存适配器数据,所以当我旋转手机时,RecyclerView 的滚动位置重置,一些建议?

【问题讨论】:

  • 在 RV 恢复时,您的适配器有内容吗?您的活动的 onCreate 代码来自哪里?
  • 是的,它在我的 Fragment 中的 OnViewCreated 中
  • 它应该保存滚动位置吗? AFAIK 这取决于你。
  • 它应该保留滚动位置,所以这对我来说看起来很奇怪。如果你能分享一个示例项目,我很高兴看到它

标签: android android-recyclerview


【解决方案1】:

最近我为所有 RecyclerView 改进并创建了一个 FlexibleAdapter 模式。旋转后还能保持状态。

使用非常简单,只需在您的常用文件中复制 2 个类 + 一些 xml,以便像 ListView 一样启用选择(单/多)。

请查看描述和完整的工作示例:https://github.com/davideas/FlexibleAdapter

【讨论】:

    【解决方案2】:

    我明白我在哪里出错了,我使用了来自

    RecyclerView
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        //used this instance of recycler view
        mRecyclerView = inflater.inflate(R.layout.recycle_fragment, container, false);
        return mRecyclerView;
    }
    

    但需要

     @Override
        public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
            super.onViewCreated(view, savedInstanceState);
            // instead of searching it after view created
            mRecycleView = ButterKnife.findById(getView(), R.id.recycler_view);
    }
    

    问题解决了

    【讨论】:

    • 我不认为这是因为您没有使用“onViewCreated”。我认为这是因为您没有为 RecyclerView 设置 id。我认为它可以通过简单地膨胀一个具有 RecyclerView 的 id 的普通 layout-xml 文件来解决。
    • @androiddeveloper 看来RecyclerView上的id是不需要的。但是,就我而言,我需要在视图的构造函数上设置 LayoutManager,而不是稍后。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-22
    相关资源
    最近更新 更多