Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MVVM+;数据绑定&x2B;视图模型不更新视图_Java_Android_Android Databinding_Android Architecture Components_Android Viewmodel - Fatal编程技术网

Java MVVM+;数据绑定&x2B;视图模型不更新视图

Java MVVM+;数据绑定&x2B;视图模型不更新视图,java,android,android-databinding,android-architecture-components,android-viewmodel,Java,Android,Android Databinding,Android Architecture Components,Android Viewmodel,我有一个奇怪的问题。我想根据加载数据设置swipeRefreshLayout的刷新。所以我有一个监听器,它根据获取的数据获取真/假。然后转到ViewModel,其中设置了ObservableBolean,由于数据绑定,它应该更新refreshLayout。它起作用了。。当设备连接到internet时 这是我的听众 @Override public void isLoading(boolean loading) { Log.d(TAG, "i

我有一个奇怪的问题。我想根据加载数据设置swipeRefreshLayout的刷新。所以我有一个监听器,它根据获取的数据获取真/假。然后转到ViewModel,其中设置了ObservableBolean,由于数据绑定,它应该更新refreshLayout。它起作用了。。当设备连接到internet时

这是我的听众

        @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
        }
这就是我的布局。我已经将TextView用于测试它是否显示正确的布尔值,但事实并非如此。它仅在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。这一部分我不确定,但我认为因为我的ObservableBolean没有改变状态(保持为false),所以它对滑动布局没有影响,所以滑动布局在内部将刷新设置为true,而我的ObservableBolean为false。 所以我必须在开始刷新数据后将该值设置为true

这是我的ViewModel方法

public void onRefresh() {
    Log.d(TAG, "onRefresh: ");
    MainLib.refreshForecast();
    setLoading(true); // <- I was missing this
}
public void onRefresh(){
Log.d(标记“onRefresh:”);
MainLib.refreshForecast();
设置加载(真)//
public void onRefresh() {
    Log.d(TAG, "onRefresh: ");
    MainLib.refreshForecast();
    setLoading(true); // <- I was missing this
}