【发布时间】:2018-04-16 05:16:22
【问题描述】:
我有以下课程
PostsViewModel.java
......
//Boolean observable to toggle the visibility of progress bar
public static final ObservableBoolean postsLoading = new ObservableBoolean(false);
private void getPosts() {
postsLoading.set(true);
getPostRepository().getPosts(new PostDataSource.LoadPostCallback() {
@Override
public void onPostsLoaded(List<Post> posts) {
boolean isEmpty = posts == null || posts.isEmpty();
//setting the post loading false here
postsLoading.set(false);
Log.d(TAG, "onPostsLoaded: posts loading set to false");
if (!isEmpty) {
mPostObservable.clear();
mPostObservable.addAll(posts);
}
errorViewShowing.set(isEmpty);
}
@Override
public void onDataNotAvailable(String message) {
postsLoading.set(false);
errorViewShowing.set(true);
errorString.set(message);
}
});
}
......
活动后
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
PostList binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
PostsViewModel mPostsViewModel = new PostsViewModel();
binding.setPostViewModel(mPostsViewModel);
mPostsViewModel.getPosts(); //calling get posts here
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data class="PostList">
<import type="android.view.View" />
<variable
name="postViewModel"
type="com.example.vuclip.mvvm_repository.posts.PostsViewModel" />
</data>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".posts.PostsActivity">
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:visibility="@{ postViewModel.postsLoading ? View.VISIBLE : View.GONE }" />
</RelativeLayout>
</layout>
我想根据PostsViewModel 中的postsLoading ObservableBoolean 变量的值来切换进度条的可见性。我使用调试器检查并确认我的代码确实将postsLoading 变量的值设置为false,但进度条仍然可见。
看起来 Observable 字段中的更改由于某种原因没有通知到布局文件。我这里出了什么问题?
我在我的 gradle 文件中启用了 dataBinding。
【问题讨论】:
-
我是否必须调用一些方法来通知更改,我知道我们必须调用
notifyChange()以防 Bindable 字段但 BaseObservable 类也需要它? -
您是否尝试在生成的代码中找到
setVisibility并在那里设置断点? -
还没有,不知道该怎么做。让我试试
-
不,使用
Observable[<PrimitiveType>]s 时不需要 - 请参阅android.googlesource.com/platform/frameworks/data-binding/+/… -
我找不到可见性切换生成的代码。 :(
标签: android mvvm data-binding