切换主题触发Activity重建时Include标签视图数据异常求助
问题原因及解析
核心原因
问题出在两个include布局内的EditText共用了同一个id。Android的视图状态保存与恢复逻辑是靠控件id来匹配数据的:当Activity因主题切换重建时,系统会先保存当前所有控件的状态,其中id为editText的控件最后一次被赋值的是secondItem.data;重建后,系统会把这个保存的值同步给所有id为editText的控件,最终导致两个include视图都显示同一份数据。
首次创建正常的原因
首次启动Activity时,没有历史视图状态需要恢复,你通过ViewBinding直接给两个独立的EditText实例设置数据,此时系统不会介入状态恢复流程,所以两个控件能正确显示各自的内容。
快速解决思路
要解决这个问题,只需要确保每个include内的EditText拥有唯一id:
- 方案1:修改
layout_edit_text布局,给EditText设置动态id(比如在代码中动态生成唯一id); - 方案2:在include标签中通过
tools:replace="android:id"覆盖内部EditText的id,为每个include的EditText指定唯一id; - 方案3:手动处理状态保存与恢复,在
onSaveInstanceState中分别保存两个EditText的值,重建时手动赋值,绕过系统的自动恢复逻辑。
内容的提问来源于stack exchange,提问作者SadeQ digitALLife
相关产品推荐
相关产品推荐

