如何在Android中保存RecyclerView的滚动位置?

编程入门 行业动态 更新时间:2024-10-17 21:23:09
本文介绍了如何在Android中保存RecyclerView的滚动位置?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我有SwipeRefreshLayout内部的Recycler视图.另外,具有打开另一个活动中的每个项目的能力. 返回到回收站后,我需要滚动到所选项目或上一个Y. 该怎么做?

I have Recycler view which lays inside of SwipeRefreshLayout. Also, have ability to open each item in another activity. After returning back to Recycler I need scroll to chosen item, or to previous Y. How to do that?

是的,我搜寻了一下,在StackOverFlow中找到了有关保存布局管理器实例的文章,例如: RecyclerView存储/恢复活动之间的状态. 但是,这对我没有帮助.

Yes, I googled, found articles in StackOverFlow about saving instance of layout manager, like this one: RecyclerView store / restore state between activities. But, it doesn't help me.

更新

现在我有这种解决问题的方法,但是,当然,它也行不通.

Right now I have this kind of resolving problem, but, of course, it also doesn't work.

private int scrollPosition; ...//onViewCreated - it is fragment recyclerView.setHasFixedSize(true); LinearLayoutManager llm = new LinearLayoutManager(getActivity()); recyclerView.setLayoutManager(llm); data = new ArrayList<>(); adapter.setData(getActivity(), data); recyclerView.setAdapter(adapter); ... @Override public void onResume() { super.onResume(); recyclerView.setScrollY(scrollPosition); } @Override public void onPause() { super.onPause(); scrollPosition = recyclerView.getScrollY(); }

是的,我已经尝试过scrollTo(int,int)-不起作用.

Yes, I have tried scrollTo(int, int) - doen't work.

现在我尝试仅滚动到例如Y = 100,但它根本不滚动.

Now I tried just scroll, for example, to Y = 100, but it doesn't scrolling at all.

推荐答案

通过@onPause保存回收视图位置的当前状态:

Save the current state of recycle view position @onPause:

positionIndex= llManager.findFirstVisibleItemPosition(); View startView = rv.getChildAt(0); topView = (startView == null) ? 0 : (startView.getTop() - rv.getPaddingTop());

通过@onResume恢复滚动位置:

Restore the scroll position @onResume:

if (positionIndex!= -1) { llManager.scrollToPositionWithOffset(positionIndex, topView); }

或另一种方式可以是@onPause:

or another way can be @onPause:

long currentVisiblePosition = 0; currentVisiblePosition = ((LinearLayoutManager)rv.getLayoutManager()).findFirstCompletelyVisibleItemPosition();

还原@onResume:

restore @onResume:

((LinearLayoutManager) rv.getLayoutManager()).scrollToPosition(currentVisiblePosition); currentVisiblePosition = 0;

更多推荐

如何在Android中保存RecyclerView的滚动位置?

本文发布于:2023-10-08 01:23:34,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1471102.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:位置   如何在   Android   RecyclerView

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!