У меня есть макет 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?