设备旋转后双向数据绑定出错

时间:2019-07-26 10:56:49

标签: android android-databinding android-architecture-components androidx two-way-binding

我使用 Android数据绑定库(双向) LiveData (绑定语法@ = {})

要重用UI,在设计布局文件时会大量使用 include layout 机制。 实际上,我在构建表单布局时多次包含同一布局文件

一切顺利,直到“设备旋转”为止。设备旋转后, 所有字段(editText)将获得与最后一行相同的值 (如下图所示)。

旋转后重新创建活动时会发生问题,因此我可以通过为活动设置android:configChanges来防止此情况。 但是我对这个问题的根源如何解决它感到好奇。

您可以在下面或full source code中找到源代码的主要部分。 预先感谢。

enter image description here


源代码

  • 行的布局(1个TextView和1个EditText)

enter image description here

  • 在主布局中重复使用两次以上的布局 enter image description here

  • ViewModel enter image description here

  • 主要活动-在OnCreate中绑定 enter image description here

3 个答案:

答案 0 :(得分:0)

您需要删除此行binding.setLifecycleOwner(this);。我确实验证了自己。

答案 1 :(得分:0)

对于可能对此问题感兴趣的人,原因似乎与表单行布局(一行的布局(1 TextView和1 EditText))中editText的ID有关,即android:id =“ @ + id / editTextID”。

三行用于使用相同的行布局创建的名字,姓氏和密码,因此这些字段的editText具有相同的ID。

轮换后,框架可以通知最后一行(密码)的编辑文本中的更改,但前两行也接收这些更新。这可能会导致问题。

要解决此问题,简单地在行布局中删除android:id =“ @ + id / editTextID”。 没有与ViewModel或其lifeCycle相关的信息。

答案 2 :(得分:-1)

将此行添加到清单文件中的活动中,

android:configChanges="keyboardHidden|orientation|screenSize"