gpt4 book ai didi

java - MVVM + 数据绑定(bind) + View 模型不更新 View

转载 作者:行者123 更新时间:2023-12-02 10:17:39 25 4
gpt4 key购买 nike

我遇到了一个奇怪的问题。我想根据加载数据设置 swipeRefreshLayout 的刷新。所以我有一个监听器,它根据获取的数据获取真/假。然后它转到设置了 ObservableBoolean 的 ViewModel,并且由于 DataBinding,它应该更新刷新布局。当设备连接到互联网时它可以工作。

这是我的听众

        @Override
public void isLoading(boolean loading) {
Log.d(TAG, "isLoading: "+loading);
//binding.slHomeSwipe.setRefreshing(loading); <- this one works
viewModel.isLoading.set(loading); // I want to use this, but it's not working
}

这是我的 View 模型。 onRefresh() 每次都会起作用。登录setLoading()总是显示正确的值。当我没有互联网连接时,日志显示错误,但刷新圆圈不会隐藏。

public class MainFragmentViewModel extends ViewModel {

...
public ObservableBoolean isLoading;

..init - isLoading = new..

public void onRefresh() {
Log.d(TAG, "onRefresh: ");
MainLib.refreshForecast();
}

void setLoading(boolean loading) {
Log.d(TAG, "setLoading: "+loading);
this.isLoading.set(loading);
}

这是我的布局。我已经放置 TextView 来测试它是否显示正确的 boolean 值,但事实并非如此。仅当 swipeRefreshLayout 有效时才有效。

<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_home_main"
...>

<TextView
android:id="@+id/tv_home_test"
android:text="@{String.valueOf(viewModel.isLoading)}"
.../>

<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/sl_home_swipe"
app:onRefreshListener="@{() -> viewModel.onRefresh()}"
app:refreshing="@{viewModel.isLoading}"
.../>

<androidx.recyclerview.widget.RecyclerView
.../>

我不认为它不工作的原因是网络连接。但在这种情况下,我注意到它不起作用。当应用程序启动时,监听器发送值 true 而不是 false 并且它正在工作。但是当通过滑动开始刷新时,就不起作用了。我怀疑 viewModel 与布局以某种方式断开了连接。

最佳答案

我已经成功了!

问题是,当我没有互联网连接并且刷新时,我的监听器返回 false。这部分我不确定,但我认为因为我的 ObservableBoolean 没有改变状态(保持 false),所以它对滑动布局没有影响,所以滑动布局内部设置刷新为 true,而我的 ObservableBoolean 为 false 。因此,我必须在开始刷新数据后立即将此值设置为 true。

这是我的 ViewModel 方法

public void onRefresh() {
Log.d(TAG, "onRefresh: ");
MainLib.refreshForecast();
setLoading(true); // <- I was missing this
}

关于java - MVVM + 数据绑定(bind) + View 模型不更新 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54561805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com