我使用 Android数据绑定库(双向)和 LiveData (绑定语法@ = {})
要重用UI,在设计布局文件时会大量使用 include layout 机制。 实际上,我在构建表单布局时多次包含同一布局文件。
一切顺利,直到“设备旋转”为止。设备旋转后, 所有字段(editText)将获得与最后一行相同的值 (如下图所示)。
旋转后重新创建活动时会发生问题,因此我可以通过为活动设置android:configChanges来防止此情况。 但是我对这个问题的根源和如何解决它感到好奇。。
您可以在下面或full source code中找到源代码的主要部分。 预先感谢。
源代码
答案 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"