如何解决何时使用 viewDataBinding.invalidateAll()
我试图查看数据更改时何时需要 binding.invalidateAll()
来刷新 UI。
我有 2 个更改数据的示例,其中一个是 UI 数据自动更改,另一个是我需要使用 invalidateAll()
来查看更改
首先,下面是我正在测试的 TextView
的 XML:
...
<TextView
android:id="@+id/name_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@{mainActivity.myName.name}" />
第一个例子
在第一个示例中,如果我更改了 onCreate()
或 onResume()
中的数据,则无需 invalidateAll()
直接更改数据,请找到以下代码:
private lateinit var binding: ActivityMainBinding
var myName = MyName(name = "Test")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this,R.layout.activity_main)
binding.mainActivity = this;
myName.name = "Data is visible directly"
}
这里,一旦UI绘制给用户,我看到TextView的文字直接设置为“数据直接可见”,无需调用binding.invalidateAll()
第二个例子
在第二个示例中,我仅在单击按钮时更改文本,如下面的代码所示:
...
fun onButtonClickedChangeData(view:View){
myName.name = "Data is visible only after invalidateAll is called"
binding.invalidateAll() // without it the text won't change
}
在第二个例子中,我必须使用 binding.invalidateAll()
来改变 TextView 的文本,如果我不使用 invalidateAll()
文本不会改变。
我的第一次猜测(似乎是错误的)
我首先想到,当我们在 Activity 已经运行并且 UI 已经对用户可见的情况下更改数据时,可能需要 binding.invalidateAll()
,如果数据在向用户绘制 UI 之前进行了更改(根据我的知识,UI 仅在 invalidateAll()
中对用户可见)。
但是当我尝试更新 onResumue()
中的数据时,数据也直接发生了变化,而无需 onResumue()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。