首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当我打开另一个活动时,RecyclerView会滚动到顶部

当你打开另一个活动时,RecyclerView会滚动到顶部的原因是因为在打开新的活动时,当前活动会失去焦点,导致RecyclerView的滚动位置被重置为顶部。

RecyclerView是Android开发中常用的列表控件,用于展示大量数据的列表。它可以自动回收和重用列表项视图,提高列表的性能和内存使用效率。

为了解决RecyclerView在打开新活动时滚动到顶部的问题,可以在打开新活动之前保存当前RecyclerView的滚动位置,并在返回到原活动时恢复滚动位置。

具体实现方法如下:

  1. 在原活动中,记录当前RecyclerView的滚动位置。可以通过RecyclerView的LayoutManager获取到第一个可见列表项的位置。
代码语言:java
复制
int firstVisibleItemPosition = ((LinearLayoutManager) recyclerView.getLayoutManager()).findFirstVisibleItemPosition();
  1. 将滚动位置保存到Bundle中,并传递给新的活动。
代码语言:java
复制
Bundle bundle = new Bundle();
bundle.putInt("scroll_position", firstVisibleItemPosition);
Intent intent = new Intent(原活动.this, 新活动.class);
intent.putExtras(bundle);
startActivity(intent);
  1. 在新活动中,获取传递过来的滚动位置,并在RecyclerView加载完数据后将其恢复。
代码语言:java
复制
Bundle bundle = getIntent().getExtras();
if (bundle != null) {
    int scrollPosition = bundle.getInt("scroll_position");
    recyclerView.scrollToPosition(scrollPosition);
}

这样,当返回到原活动时,RecyclerView会滚动到之前记录的位置,实现了滚动位置的保存和恢复。

推荐的腾讯云相关产品:腾讯云移动推送(https://cloud.tencent.com/product/umeng_message)可以用于在移动应用中实现消息推送功能,提升用户体验。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

NestedScrollView 嵌套 ListView 实现滑动折叠效果

当我们引入RecyclerView的时候,恰好是压死骆驼的最后一根稻草,故不得不采用其他方案来代替RecyclerView 和 CollapsingToolbarLayout实现的折叠效果。...enterAlways - 实现quick return效果, 当向下移动,立即显示View(比如Toolbar). exitUntilCollapsed - 向上滚动收缩View,但可以固定Toolbar...enterAlwaysCollapsed - 当你的View已经设置minHeight属性又使用此标志,你的View只能以最小高度进入,只有当滚动视图到达顶部才扩大完整高度。...MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); } } 解决NestedScrollView嵌套的listView滚动无响应...题外话3 23.2.0中在CoordinatorLayout中使用Toolbar ,toolbar无法与顶部对齐,即顶部存在垂直间距。

3.3K50

自定义 behavior - 完美仿 QQ 浏览器首页,美团商家详情页

open 状态指 Tab+ViewPager 还没有滑动到顶部的时候,header 还 没有被完全移除屏幕的时候 close 状态指 Tab+ViewPager 滑动到顶部的时候,Header 被移除屏幕的时候...当 Tab 滑动到顶部的时候,我们向上滑动 ViewPager 里面的 RecyclerView 的时候,RecyclerView 可以正常向上滑动,即此时外部容器没有拦截滑动事件。...当我们向下滑动的时候,header 并不会随着滑动,只会滑动 content 部分的 recyclerView 第三部分 search 部分:当我们向上滑动的时候,Search 部分会随着滑动,最终停留在固定的位置...因此,当我们给子 View 设置点击事件的时候,由于默认的 parent 没有拦截事件,走到子 View 的 onToucheEvent 事件中,由于设置了点击事件,事件被消费了,所以不会回调父 View...说这么多,总结如下 遇到不会的多做笔记,尤其是涉及原理的 对代码要有敬畏之心,不多说,自己领悟取 保持一颗谦卑之心

1.3K40

Android仿微信朋友圈点击评论自动定位相关行功能

打开你的微信朋友圈,点击评论,你就会发现有一个小细节:文本输入框的高度恰好定位这条信息的底部位置 ?...列表的滚动 输入框也有了,这时候就差滚动了。我们可以通过smoothScrollBy来让RecyclerView按X或者Y轴进行滚动。那我们这里到底应该滚动多少距离才对呢?,咱们来计算一下吧 ?...这样黄色顶部与红色顶部中间的区域高度,就是RecyclerView需要滚动的数值这样就好办了,我们使用getLocationOnScreen去获取差值,再加上评论区域高度就行了 fun showInputComment...但是还有几个小问题,如果是点击最后一行的话,因为滚动空间不足而不能实现相同的效果,并且按返回键的时候,键盘先消失,然后再按一次之后Dialog才消失。...总结 以上所述是小编给大家介绍的Android仿微信朋友圈点击评论自动定位相关行功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编及时回复大家的。

1.5K60

已中招!Android 基础面试常常吊死在这几个问题上……

同样,如果有一个apply() 未完成,将执行另一个commit() 。commit() 将被阻止,直到apply() 未完成。 17、面试官:RecyclerView 它是怎么工作的?...因此, RecyclerView 只创建屏幕上的10个左右的视图。这样,速度和内存使用率将提高10倍。但是,当开始滚动并需要开始显示下一个视图时会发生什么?...这就是为什么 RecyclerView 利用以下事实:滚动,新行出现在屏幕上,而旧行消失在屏幕上。代替为每个新行创建新视图,而是通过将新数据绑定旧视图来对其进行回收和重用! 应聘者:我学到了!...ViewHolder模式:Recyclerview实现了ViewHolders模式,但在ListView 中不是必需的。RecyclerView滚动回收并重用单元格。...在 ListView 中, findViewById() 在滚动 ListView 期间,代码可能频繁调用,这可能降低性能。即使适配器返回膨胀视图以进行回收,仍然需要查找元素并进行更新。

2K20

Android 三级NestedScroll嵌套滚动实践

所以通过 NestedScrolling(Parent2/Child2) 实现嵌套滚动,当你触发了一个 fling ,也可以做很顺滑连贯的交替滚动,而 1 就很难达到相同的效果。...从这些方法的命名上也能看出来嵌套滚动的交互顺序是 Child 主动触发,Parent 被动接受,所以决定是否打开嵌套滚动的方法 setNestedScrollingEnabled 由 Child 实现,...三级嵌套滚动 一个常见的嵌套滚动例子是 CoordinatorLayout/AppbarLayout – RecyclerView, 实现的效果是向上滑动列表先将 AppbarLayout 向上滑动直到完全折叠...向下滑动列表在展开 AppbarLayout 之前先展开搜索框。 列表没滑动到顶部可以通过触发一定速度的向下 fling 来展开搜索框。...可以发现这里除了 CoordinatorLayout/AppbarLayout – RecyclerView 这对嵌套滚动的 Parent 和 Child 之外还多了搜索框和刷新动画,而这三者之间的滑动逻辑需要通过嵌套滚动实现

1.6K30

Android之MaterialDesign应用技术

,往下滑,则返回顶部图标显示,往上滑图标不显示, 原因:在很多段子软件中,会有大量的文字和图片,当用户往下翻的时候,也就是说内容不断的在上方消失,下面的内容不算的刷新出来,这时右下角出现一个辅助用户回到顶部的按钮...2.1:创建布局文件 外层是协调者布局,中间就是一个类似于listview的RecyclerView,和一个右下角的返回顶部按钮。...两个方法都有关键作用,一个是滚动,关心该事件,一个是开始滚动,监听该事件。...CoordinatorLayout coordinatorLayout, View child, View directTargetChild, View target, int nestedScrollAxes) {//滚动发生...return true; } /**滚动开始,监听该事件。

1.3K90

Android ScrollView粘性头部代码分享

前言,一天在点外卖的时候,注意饿了么列表页的滑动效果不错,但是觉得其中的手势滑动还是挺复杂的,正好又碰到了在熟悉Touch事件的理解当中,所以就抽空对着饿了么的列表页面尝试写写这个效果 1.先贴一个实现的效果图...另外在这里ScrollViewWithStickHeader增加autoscroll属性,默认是关闭的,如果autoscroll:true的话,在我们手指放开的时候,contentView判断是否自动滑动到顶部还是隐藏不见...5.0.0.3版本修复当有底部有操作栏的时候,界面的滚动出现错乱的问题。...当我们底部有view需要固定的时候,我们需要通过mStickScrollView.setBottomView(mViewBottom);就可以了,如下所示: ?...6.2.既然我们知道了怎么让view的touch事件,接下来我们就要明白在什么情况下我们应该让父view执行滚动事件,什么时候让子view执行滚动事件。

1.4K20

嵌套滑动通用解决方案--NestedScrollingParent2

京东首页 可见,在向上滑动页面,当tabLayout滑动到顶部,外层RecyclerView停止滑动,此时tabLayout即为吸顶状态,接着 滑动ViewPager中的内层RecyclerView...向下滑动,如果tabLayout是吸顶状态,那么先滑动内层RecyclerView,然后再滑外层RecyclerView。 那么,如果我们 直接 按上述布局结构来实现,会是京东这种效果吗?...所以按照正常处理滑动冲突的思路处理--当tab没到顶部,parent拦截事件,tab到顶部 parent就不拦截事件,但是由于手指没抬起来,所以这一事件序列还是继续给parent,不会到内部RecyclerView...,的处理 * * @param lastItemTop tab屏幕顶部的距离,是0就代表到顶了 * @param dy 目标滑动距离, dy>0 代表向上滑...,的处理 * * @param lastItemTop tab屏幕顶部的距离,是0就代表到顶了 * @param dy * @param consumed

3.6K31

【Android】RecyclerView:打造悬浮效果

实现思路: 利用RecyclerView.ItemDecoration绘制Province(就像绘制分割线一样) 同一组的City,只绘制一个Province 计算偏移,将当前Province固定在顶部...(画的内容覆盖在item的上层) RecyclerView 的背景、onDraw绘制的内容、Item、onDrawOver绘制的内容,各层级关系如下: 层级关系 绘制分割线 先看看一般的分割线绘制...滚动城市列表,省份悬浮在顶部。效果如下: 效果1 实现 由于需要悬浮效果,所以需要在onDrawOver中绘制分组。...当前Item与上一个Item为同一个分组,跳过该Item的绘制。...(当前Item的底部viewBottom可近似认为下个Item的顶部)距离RecyclerView顶部小于top,偏移当前分组位置。

3K100

ViewPager,ScrollView 嵌套ViewPager滑动冲突解决

ScrollView 的最上层的 Layout 里面多多个孩子的时候,当下面一个孩子是 RecyclerView 或者ListView 的时候,往往自动滑动到 ListView 或者 RecyclerView...的第一个 item,导致进入界面的时候导致 RecyclerView 上面的 View 被滑动到界面之外,看不见,这时候的用户体验是比较差的 即结构如下面的时候 ?...,滚动条自然就显示到顶部了。...(true); view.requestFocus(); 这段代码在初始化的时候就让该界面的顶部的某一个控件获得焦点,滚动条自然就显示到顶部了。...但是该方法存在缺点,就是当我们上面的view如果滑动到一半的时候,切换到下一个Fragment,在切换回来的时候,RecyclerView的第一个item自动滑动到顶部

5.7K51

手把手教你打造RecyclerView滚动特效

Item动画分析 我们化整为零,将这个效果分解一个item上来看其实是这样的: ?...可见范围顶部的距离。...RecyclerView初始情况 我们可以将RecyclerView初始情况设想如上图,此时turningLine的值为0。当RecyclerView滑动: ?...总高度(包含不可见部分)与RecyclerView可见部分的高度相差得到;而scrollY则随着RecyclerView滚动变化,因此需要对RecyclerView进行滚动事件的监听: recyclerView.addOnScrollListener...当RecyclerView滑动太快,单位滚动距离内,滚动监听事件的触发频率较低,导致有些Item的动画进度未达到100%便从屏幕中消失,从而存在重新滚动到那个Item,Item的动画停留在1%~99%

2.5K10

ViewPager,ScrollView 嵌套ViewPager滑动冲突解决

ScrollView 的最上层的 Layout 里面多多个孩子的时候,当下面一个孩子是 RecyclerView 或者ListView 的时候,往往自动滑动到 ListView 或者 RecyclerView...的第一个 item,导致进入界面的时候导致 RecyclerView 上面的 View 被滑动到界面之外,看不见,这时候的用户体验是比较差的 即结构如下面的时候 在Activity中的相关解决方法...,滚动条自然就显示到顶部了。...(true); view.requestFocus(); 这段代码在初始化的时候就让该界面的顶部的某一个控件获得焦点,滚动条自然就显示到顶部了。...但是该方法存在缺点,就是当我们上面的view如果滑动到一半的时候,切换到下一个Fragment,在切换回来的时候,RecyclerView的第一个item自动滑动到顶部

63210

高仿支付宝9.9.2版本生活模块界面来讲解CoordinatorLayout,AppBarLayout,CollapsingToolbarLayout

而layout_srcollFlags的动作主要如下: scroll:值设为scroll的View跟随滚动事件一起发生移动。...enterAlways:值设为enterAlways的View,当ScrollView往下滚动,该View直接往下滚动。而不用考虑ScrollView是否在滚动。...View就暂时不去往下滚动,直到ScrollView滑动到顶部不再滑动,View再继续往下滑动,直到滑到View的顶部结束。...最后snap这是属性是子View不会存在局部显示的情况,滚动Child View的部分高度,当我们松开手指,Child View要么向上全部滚出屏幕,要么向下全部滚进屏幕。...CollapsingToolbarLayout只要有这方面: 1.title展开是最大的,然后随着收缩越来越少,直到屏幕的顶部,通过app:title设置title,不然就默认。

1.1K20

ViewPager中Fragment状态保存的哪些事

引言 在使用 ViewPager , 如果我们的适配器使用的是 FragmentStatePagerAdapter ,那么当我们重新滑到之前已销毁的页面,一般情况下页面的状态依然将保持不变(比如...RecyclerView滚动位置等,EditText 的 输入内容 等), 或者说 View 历史状态被还原了。...重新创建后 View状态(RecyclerView滚动位置) 的变化,如下所示: 因为默认缓存为 n(1)+2 ,即当我们滑动到 item=3 ,1 页面此时已被销毁。...但当我们重新切换到 1 ,可以发现,Fragment1 中 RecyclerView滚动位置 没有变化,所以可以证明 Fragment 的状态的确是被还原了。 那这是怎么做的呢?...当 Fragment 生命周期执行 activityCreated ,从而调用 restoreViewState() 触发View状态的恢复(此时onCreateView已执行),然后将我们的view

1.3K20

ViewPager2实现内部Item的动态滚动

我们这是一个视频播放页+详情页,考虑简单快捷,就想到了一个 ViewPager2 就可以实现,简单又快捷,为自己点赞。一想到如此easy,瞬时笑出了猪叫。...既然有这个方法,那不就很简单吗,伪代码如下: 查看效果如下: 示例 我裂开了,为什么这样,我就属性动画里调了一下而已,去看一下源码。...解决方法 既然如此,ViewPager2是基于RecyclerView,那么我去调用RecyclerView滚动不就行吗,思路如下: ViewPager2-> RecyclerView, RecyclerView...默认是私有的,可以通过反射或者 getChildAt(0) 获取 RecyclerView不支持 scrollTo() ,可以通过 LinearLayouManager 去滚动 LinearLayoutManager-scrollToPositionWithOffset...需要注意的点 就如我上面最开始分析所述,如果详情页是可滑动的,那么就必须处理一下滑动冲突,相应的方式也很简单,使用内部拦截法,让滑动的View优先获得事件即可,当处于滑动View顶部,再将事件还给父

1.5K20
领券