は基本的に私のViewModelはMutableLiveDataとして以下のPOJO成り立つ:アラビリストのサイズがデータバインディングによって変化するのを観察する方法はありますか?
public class SubredditAddition {
private final ArrayList<Keyword> mKeywords = new ArrayList<>();
}
をそして私はmKeyword.size() > 0
現在、私は私の見解に次の行があれば表示が消えたい:
android:visibility="@{viewModel.subredditAddition.keywords.size() == 0 ? View.GONE : View.VISIBLE}"
を
しかし、mKeywords配列のサイズを変更しても、ビューの可視性には影響しません。ビューをArrayListのサイズにリアルタイムで反応させるにはどうすればよいですか?
更新:
public class SubredditAddition {
private final ObservableArrayList<Keyword> mKeywords = new ObservableArrayList<>();
}
私のViewModel MutableLiveDataでSubredditAdditionを保持し、次のようになります:
public class SubredditSelectionViewModel extends AndroidViewModel {
private MutableLiveData<SubredditAddition> mSubredditAddition = new MutableLiveData<>();
public SubredditSelectionViewModel(Application application) {
super(application);
mSubredditAddition.setValue(new SubredditAddition());
}
}
そして、私の断片そうは次のように
マイSubredditAdditionクラスは今、ObservableArraylistを使用していますキーワードを更新するには、次のコードを使用してください:
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);
}
}
私のXMLビューは次のようになります。私は私の断片でsaveKeyword()
メソッドを介してキーワードを追加すると
<RelativeLayout ....
android:visibility="@{viewModel.subredditAddition.keywords.size() == 0 ? View.VISIBLE : View.GONE}">
はしかし、私のUIはまだ更新されません。これをどうすれば解決できますか?
しかし私は、何の更新がUIにまだなかった、これを試してみました。 SubredditAdditionはBaseObservableなどを拡張する必要がありますか? – BeardMagician
ObservableList変更されたビュー(set()が呼び出された)をビューに通知します。公開されており、ゲッター/セッターがないことを確認してください。注意:あなたのリストの項目を追加または削除する場合にのみ通知します。あなたもキーワードの変更を聞きたいですか?はいの場合は、解決策の回答を更新してください –
アイテムが追加または削除されたときに通知します。今すぐlist.add()を実行します。代わりにlist.set()を使うはずですか? – BeardMagician