Java MVVM+;数据绑定&x2B;视图模型不更新视图
我有一个奇怪的问题。我想根据加载数据设置swipeRefreshLayout的刷新。所以我有一个监听器,它根据获取的数据获取真/假。然后转到ViewModel,其中设置了ObservableBolean,由于数据绑定,它应该更新refreshLayout。它起作用了。。当设备连接到internet时 这是我的听众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
@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
}