RecyclerView 横竖屏切换时,item自动滑动的问题

问题现象:

 第一发现这个问题是做视频列表播放与全屏播放切换的时候。

需求就是,做一个列表,item全是视频,点击每个item的播放按钮,可以直接在列表中播放,播放过程中点击该item的全屏播放按钮,视频可以无缝切换的全屏播放。

为了实现视频无缝切换成全屏横屏播放,首先在item的全屏播放按钮的点击事件里将当前item中的VideoView移除,addView进Activity的decotView中;然后,再同时让Aciticity全屏和横屏。从全屏播放回来时,会再让Activity从横屏旋转会竖屏,同时再将VideoView重新addView回之前item中。这个时候问题就出现了,在Activity切换竖屏后,视屏应该保持播放,但播放的视频的item的位置被滑动了,有一半都滑出了屏幕,只有一半视频露出来。但进入横屏前,这个item明明在RecyclerView中间的位置,返回竖屏应该还在这个位置继续播放视频,才能保证用户体验,才能让用户有视频播放列表直接播放和全屏播放切换的流畅感。

经过再三推理,最后猜测是因为横竖屏切换导致了获取焦点的item的变化。在竖屏时,此时recycleview的高是手机的高,假如可以显示3个item,那么焦点就在中间item上。当旋转到横屏时,此时recycleView的高变成手机的宽,只能显示一个item了,刚才那个获取焦点的item可能会在屏幕外,此时焦点就会落在正在显示的这个item上。这个时候再从横屏切回竖屏,recycleView就会将这个item显示在中间位置,从而导致recycleView的内部的item会有一个滑动,item的位置较切换到横屏前发生位移。


解决办法:

给RecycleView添加一个控制焦点获取的属性——android:descendantFocusability="blocksDescendants";

将值写成blocksDescendants;不懂可以百度一下descendantFocusability的作用。添加了这一行之后,横竖屏切换,recycleView就不会再获取焦点。没有焦点变化的问题,recycleView也就不会再去调整item的位置,自然也就会保持item的位置总是不变,除非认为滑动recycleView。


    android:id="@+id/rlv_content"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:descendantFocusability="blocksDescendants"/>

你可能感兴趣的:(RecyclerView 横竖屏切换时,item自动滑动的问题)