文本数据绑定在 Retrofit2 回调中不起作用



登录成功后,我正在绑定显示用户名。

private fun getInfo(context: Context, userkey: String){
binding!!.initVm!!.username = "Hello, boo1"
ServiceGenerator
.createService(Service::class.java)!!
.getUserInfo(userkey)
.enqueue(object : Callback<UserInfo> {
override fun onFailure(call: Call<UserInfo>, t: Throwable) {
binding!!.initVm!!.username = "Hello, boo5"
}
override fun onResponse(call: Call<UserInfo>, response: Response<UserInfo>) {
val result = response.body()!!
if (response.isSuccessful){
Log.d("test", "Hello, ${response.body()!!.username}")
binding!!.initVm!!.username = "Hello, boo2"
}else{
binding!!.initVm!!.username = "Hello, boo3"
}
}
})
}
<TextView
android:id="@+id/tv_greeting"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:text="@{initVm.username}"
android:visibility="@{initVm.greetingVisibility}"
android:textStyle="bold"/>

即使网络通信成功,它也不会绑定数据。因此,它显示"你好,boo1"。这很奇怪。这是因为 Asyc 而发生的吗?如何解决这个问题?

我可以通过访问视图来插入文本。但我不想这样做,我想使用绑定。

class  InitViewModel(handler: InitHandler) : ViewModel() {
var handler = handler
var greetingVisibility = View.VISIBLE
var logInVisibility = View.VISIBLE
var username = "Hello, N/A"
// ... methods
}

我不认为这是因为异步。这是因为您的用户名不可观察,因此其更改不会影响您的 UI。

要通过绑定来更新 UI,ViewModel 中的var应该是可观察的 - LiveData(在这种情况下,没有必要显式观察它 - DataBinding 框架将为您执行此操作(或 ObservableField String

如果选择实时数据,则应从片段|活动仅:

binding!!.initVm!!.username.value = "Hello, boo2"

之后 UI 将更新

相关内容

  • 没有找到相关文章

最新更新