Использование LiveData для настройки видимости TextView - PullRequest
0 голосов
/ 07 сентября 2018

Я хочу переключить видимость 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? Любая помощь очень ценится.

1 Ответ

0 голосов
/ 15 сентября 2018

Одна вещь, которую я имею в виду, - вы установили обязательство соблюдать liveData? Согласно документации необходимо установить макет привязки для наблюдения жизненного цикла binding.setLifecycleOwner(this)

...