Android横竖屏切换,列表中item布局复用错乱

1. 情景

1.1 横竖屏切换 ActivityAndroidManifest.xml 中申明

android:configChanges="screenSize|keyboardHidden|orientation"

Activity 可以不重新创建,只执行 onConfigurationChanged(Configuration) 方法

1.2 横竖屏两种情况布局不一样

layout-land 文件夹下复制竖屏下 Activity 布局进行修改,布局名字一定要相同,布局中控件的 id 也要相同,位置可以做调整。

1.3 出现问题的特殊情况

假设Activity布局内有一个 RecyclerView,那么一定会有 Adapter 对应的 item 布局,如果横竖屏 item 布局有变化,需要把 item 布局也复制一个到 layout-land 进行调整。

切记如果只有 item 布局变了,不能只复制 item 布局,否则横竖屏切换时一点效果都没有,必须将其所附属的 Activity 布局也复制到 layout-land 文件夹下。

上面的情况虽然横竖屏切换时 item 布局变了,但是上下拖动列表,会发现有些是竖屏的布局,有些是横屏的布局

2. 原因分析

推测是 Activity 中申明的 Adapter 变量还是原来的变量,所以其中 ViewHolder 有缓存切换横竖屏前的 item 视图,但由于屏幕高度的变化,所以有些用了新的 item 布局,而有些还用是 ViewHolder 中缓存布局。

3. 解决方法

最简单的解决办法是在 ActivityonConfigurationChanged(Configuration) 方法中重新 new Adapter ,然后给 RecyclerView 设置,并重新刷新数据。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值