Android DataBinding LiveData - уведомление не было изменено в DialogFragment и BottomSheetDialogFragment - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть макет BottomSheetDialogFragment, подобный следующему:

<data>

    <variable
        name="viewModel"
        type="com.sample.MyViewModel" />
</data>

<TextView android:id="@+id/tvValue"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text='@{String.format("%.1f", viewModel.weight)}'/>

<Button android:id="@+id/cmdUpdate"
                android:layout_height="wrap_content"
                android:layout_width="match_parent"
                android:onClick="@{() -> viewModel.updateWeight()}"
                android:text="@string/update" />

А вот код котлина:

  // MyViewModel
  val weight = MutableLiveData<Double>()
  fun updateWeight() {
     weight.value?.let {
        weight.value = (it + 0.1)
    }
  }

 // BottomSheetDialogFragment bind view model
 val myViewModel = ViewModelProviders.of(it, factory).get(MyViewModel::class)
 binding.viewModel = myViewModel

// code showing BottomSheet:
 val fragment = MyBottomSheetFragment()
 fragment.show(fragmentManager, "bottomsheet")

При первом открытии фрагмента нижнего листа он может показатьзначение веса, но , когда я нажимаю кнопку, чтобы обновить вес, ничего не происходит .Из отладчика я вижу, что вызывается метод updateWeight, и значение веса изменяется, но TextView не обновляется.Это также происходит с другим DialogFragment.
Тот же код может работать, если я использую обычный Fragment
Что-то не так с DialogFragment & DataBinding?

1 Ответ

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

Вам необходимо позвонить

binding.setLifecycleOwner(this)

В соответствии с документацией , это позволяет обновить ваше представление при изменении LiveData.

...