Я хочу переключить видимость TextView с помощью LiveData. Было несколько других постов по настройке видимости с привязкой к данным, но они используют Observables, тогда как я хочу использовать (более новые) LiveData. В частности, используйте LiveData.
Используя эту документацию и несколько постов SO, я уже узнал, что вы должны правильно выровнять свой получатель для вашей наблюдаемой (LiveData) так, чтобы тип возвращаемого значения соответствовал типу, ожидаемому установщиком для Посмотреть атрибут, который вы хотите установить. В частности:
- setVisibility () для View требует int, тогда как у меня есть член LiveData (поэтому метод получения в моей ViewModel также будет возвращать этот тип)
- преобразование этого логического значения в View.VISIBLE и VIEW.GONE возможно с использованием троичного оператора. Я также должен добавить safeUnbox () в свое выражение XML, чтобы сделать его примитивным логическим значением
Используя эти идеи, в моем классе ViewModel я определил:
MutableLiveData<Boolean> textHintVisible;
После нажатия кнопки я установил это значение в False:
textHintVisible.postValue(false);
(обратите внимание, я также пытался с setValue ())
Затем в свой макет XML я включил:
<TextView
android:visibility="@{(safeUnbox(viewModel.textHintVisible) ? View.VISIBLE : View.GONE)}"
/>
Но, тем не менее, мой TextView всегда виден. Для отладки я добавил наблюдателя в свою деятельность, и это подтверждает, что мой логический параметр правильно переключается между истиной и ложью:
mHintsViewModel.getTextHintVisible().observe(this, new Observer<Boolean>() {
@Override
public void onChanged(@Nullable Boolean newInt) {
Log.i(TAG,"onChanged: "+newInt);
}
});
Но мой TextView остается видимым все время. Что я делаю неправильно? Разве нельзя использовать LiveData для этого? Должен ли я использовать дополнительный конвертер? Или мой код в принципе правильный, но это ошибка в Android Studio? Любая помощь очень ценится.