【问题标题】:Android DataBinding LiveData - not notify changed in DialogFragment & BottomSheetDialogFragmentAndroid DataBinding LiveData - 在 DialogFragment 和 BottomSheetDialogFragment 中未通知更改
【发布时间】:2018-09-24 23:17:45
【问题描述】:

我有一个这样的 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" />

这里是 kotlin 代码:

  // 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")

第一次打开bottomsheet片段,它可以显示重量值,但是当我点击按钮更新重量时,没有任何反应。从调试器可以看到updateWeight方法被调用了,权重值改变了,但是TextView没有更新。这也发生在其他 DialogFragment 上。
如果我使用普通的Fragment
,相同的代码可以工作 DialogFragment & DataBinding 有问题吗?

【问题讨论】:

    标签: android kotlin android-databinding android-livedata android-viewmodel


    【解决方案1】:

    你需要打电话

    binding.setLifecycleOwner(this)
    

    根据documentation,它允许在LiveData 更改时更新您的视图。

    【讨论】:

    • 太棒了,我在DialogFragmentBottomSheetDialogFragment 上忘记了这条线。太感谢了。现在可以使用了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-01
    • 2019-12-10
    • 2018-12-04
    • 2021-11-04
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多