Java 有没有办法观察Arraylist';通过数据绑定改变大小?

Java 有没有办法观察Arraylist';通过数据绑定改变大小?,java,android,data-binding,view,android-databinding,Java,Android,Data Binding,View,Android Databinding,基本上,我的ViewModel将以下POJO作为可变LiveData保存: public class SubredditAddition { private final ArrayList<Keyword> mKeywords = new ArrayList<>(); } public class SubredditSelectionViewModel extends AndroidViewModel { private MutableLiveDa

基本上,我的ViewModel将以下POJO作为可变LiveData保存:

public class SubredditAddition {

    private final ArrayList<Keyword> mKeywords = new ArrayList<>();

}
public class SubredditSelectionViewModel extends AndroidViewModel {

    private MutableLiveData<SubredditAddition> mSubredditAddition = new MutableLiveData<>();

    public SubredditSelectionViewModel(Application application) {
        super(application);

        mSubredditAddition.setValue(new SubredditAddition());
    }
}
但是,对mKeywords数组大小的更改不会影响视图的可见性。如何使视图实时响应ArrayList的大小

更新:

我的SubredditAddition类现在使用ObservableArraylist,如下所示:

public class SubredditAddition {

    private final ObservableArrayList<Keyword> mKeywords = new ObservableArrayList<>();

}
公共类子redditaddition{
private final observearraylist mKeywords=新observearraylist();
}
我的ViewModel如下所示,在可变LiveData中保存SubredditAddition:

public class SubredditAddition {

    private final ArrayList<Keyword> mKeywords = new ArrayList<>();

}
public class SubredditSelectionViewModel extends AndroidViewModel {

    private MutableLiveData<SubredditAddition> mSubredditAddition = new MutableLiveData<>();

    public SubredditSelectionViewModel(Application application) {
        super(application);

        mSubredditAddition.setValue(new SubredditAddition());
    }
}
公共类子RedditSelectionViewModel扩展了AndroidViewModel{
私有MutableLiveData mSubredditAddition=新的MutableLiveData();
公共子RedditSelectionViewModel(应用程序){
超级(应用);
setValue(新的SubredditAddition());
}
}
我的片段有以下代码来更新关键字:

public class SubredditSelectionFragment extends Fragment {

    private void saveTag(Keyword newKeyword) {
        SubredditSelectionViewModel viewModel =
                ViewModelProviders.of(this).get(SubredditSelectionViewModel.class);

         ObservableArrayList<Keyword> keywords = viewModel.getSubredditAddition().getKeywords();

        keywords.add(newKeyword);
    }
}
公共类SubredditSelectionFragment扩展了片段{
私有void saveTag(关键字newKeyword){
子Reddits选择视图模型视图模型=
ViewModelProviders.of(this.get)(SubredditSelectionViewModel.class);
ObservableArrayList关键字=viewModel.getSubredditAddition().getKeywords();
关键词.add(newKeyword);
}
}
我的XML视图如下所示:

<RelativeLayout ....
            android:visibility="@{viewModel.subredditAddition.keywords.size() == 0 ? View.VISIBLE : View.GONE}">


但是,一旦我通过片段中的
saveKeyword()
方法添加关键字,我的UI仍然不会得到更新。我如何解决这个问题?

是的。ArrayList本身是不可见的。您想将更改推送到您的注册表onec以添加/删除项目,或者改用
ObservableArrayList

它的行为类似于ArrayList,您可以使用
get()
set()

最后在布局中:

android:visibility="@{viewModel.listVisibility}"

我尝试了这个,但是UI仍然没有更新。SubredditAddition是否必须扩展BaseObservable或其他内容?ObservableList通知视图onec它已更改(set()已调用)。确保它是公开的,并且您没有任何getter/setter。注意:它仅在您的列表添加或删除项目时发出通知。您是否也要侦听关键字中的更改?如果是,我将更新解决方案的答案。我希望在添加或删除项目时通知您。现在我不需要list.add()。我应该使用list.set()吗?这取决于您使用的是什么。使用BaseObservable/Observable with registry或ObservableList:-)请查看我在帖子中的更新,了解我是如何构建代码的;即使使用了observablelist,它仍然不起作用
android:visibility="@{viewModel.listVisibility}"