android 应用主题更改时更新包含标记数据(重新创建Activity)

vxbzzdmp  于 2024-01-04  发布在  Android
关注(0)|答案(1)|浏览(153)

我在xml布局中使用了多个include标签,如下所示:

  1. <include
  2. android:id="@+id/firstView"
  3. layout="@layout/layout_edit_text"
  4. android:layout_width="match_parent"
  5. android:layout_height="wrap_content"
  6. android:layout_marginHorizontal="@dimen/normal_margin"
  7. android:layout_marginTop="@dimen/normal_margin" />
  8. <include
  9. android:id="@+id/secondView"
  10. layout="@layout/layout_edit_text"
  11. android:layout_width="match_parent"
  12. android:layout_height="wrap_content"
  13. android:layout_marginHorizontal="@dimen/normal_margin"
  14. android:layout_marginTop="@dimen/normal_margin" />

字符串
这两个包含标签是相同的,它们只是一个EditText和一个Label。
他们的输入数据在Kotlin活动中以编程方式更新,一切正常,视图更新正确,但当我在调用onCreate后更改设备主题(配置更改)时,突然两个包含视图(firstView,secondView)具有相同的值(secondView的值)

更新:

我使用viewBinding来更新视图:

  1. firstView.editText.setText(firstItem.data)
  2. secondView.editText.setText(secondItem.data)


但在重新创建Activity后,包含的两个视图具有相同的数据(secondItem数据)

  • 原因是什么?为什么活动创建时第一次没有出现此问题?*
l3zydbqr

l3zydbqr1#

这是因为在视图层次结构中有多个具有相同id的EditText(包含在同一个文件中)。当Activity被重新创建时,它会自动恢复视图的一些基本数据,包括EditText中保留的文本,系统使用视图的ID来保存,查找和恢复数据,具有相同空id的多个相同视图(由于包含来自同一文件)将误导还原过程
通过以下方式禁用EditText自动保存状态:

  1. android:saveEnabled="false"

字符串
手动保存和恢复EditText视图的状态(可选)。或者跳过此步骤并将其留空:

  1. override fun onSaveInstanceState(outState: Bundle) {
  2. super.onSaveInstanceState(outState)
  3. outState.putString("firstValue", firstView.editText.text)
  4. outState.putString("secondValue", secondView.editText.text)
  5. }
  6. override fun onRestoreInstanceState(savedInstanceState: Bundle) {
  7. super.onRestoreInstanceState(savedInstanceState)
  8. firstView.editText.setText(savedInstanceState.getString("firstValue"))
  9. secondView.editText.setText(savedInstanceState.getString("secondValue"))
  10. }

展开查看全部

相关问题