LiveDataを使用してTextViewの表示を切り替えたいのですが。データバインディングで可視性を設定することについて他にもいくつかの投稿がありますが、これらはObservableを使用していますが、私は(新しい)LiveDataを活用したいと考えています。特に、LiveDataを使用します。
このドキュメント といくつかのSO投稿を使用して、戻り値の型が設定するビュー属性のセッターが期待するタイプ具体的には:
これらの洞察を使用して、私のViewModelクラスで、以下を定義しました。
MutableLiveData<Boolean> textHintVisible;
ボタンを押した後、この値をFalseに設定しました。
textHintVisible.postValue(false);
(注、setValue()でも試しました)
次に、レイアウトXMLに以下を含めました。
<TextView
Android:visibility="@{(safeUnbox(viewModel.textHintVisible) ? View.VISIBLE : View.GONE)}"
/>
しかし、それでも、私のTextViewは常に表示されています。デバッグするために、アクティビティにオブザーバーを追加しました。これにより、ブール値がtrueとfalseの間で正しく切り替えられていることが確認できます。
mHintsViewModel.getTextHintVisible().observe(this, new Observer<Boolean>() {
@Override
public void onChanged(@Nullable Boolean newInt) {
Log.i(TAG,"onChanged: "+newInt);
}
});
しかし、私のTextViewは常に表示されたままです。何が悪いのですか?これにLiveDataを使用することは不可能ですか?追加のコンバーターを使用する必要がありますか?または私のコードは原則的に正しいですが、これはAndroid Studioのバグですか?)どんな助けでも大歓迎です。
私が心に留めていることの1つは、liveDataを監視するようにバインディングを設定しましたか? documentation に従って、ライフサイクルを監視するためにバインディングレイアウトを設定する必要がありますbinding.setLifecycleOwner(this)