在DialogFragment中观察Viewmodel Livedata

阿布舍克·乌杜帕

我有一个Viewmodel里面有一些Livedata参数。这些Livedata参数(clickedItem)的变化之一旨在触发DialogFragment

DialogFragmentOnCreateDialog(savedInstanceState: Bundle?)方法中,我正在提取并使用上述Livedata参数中的数据来做某件事。

这是clickedItem观察者方法:

clickedItem.observe(viewLifecycleOwner, Observer { clickedItem ->
                if (clickedItem != null && !dialogIsDisplayed) {
                    showAddItemDialog()
                }
            })

这是DialogFragmentOnCreateDialog(savedInstanceState: Bundle?)方法:

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        return activity?.let {
            val builder = AlertDialog.Builder(it)

            binding = DataBindingUtil.inflate(
                requireActivity().layoutInflater,
                R.layout.business_inventory_selection_item_dialog, null, false
            )

            //Attach viewmodel to this fragment.
            setupViewModel()

            builder.setView(binding.root)

            bindView(viewModel.clickedItem.value!!)

            builder.create()

        } ?: throw IllegalStateException("Activity cannot be null")
    }

这是setupViewModel()方法:

private fun setupViewModel() {
        activity?.run {
            viewModel = ViewModelProviders.of(this)
                .get(BusinessInventorySelectionViewModel::class.java)
            with(viewModel) {
                itemBrand.value = null
                unitOfMeasurement.value = null
            }
        }
        bindViewModel()
    }

private fun bindViewModel() {
    binding.apply {
        businessinventoryselectionviewmodel = viewModel
        lifecycleOwner = this@ItemSelectionDialogFragment
    }
}

现在的问题是:当我尝试使用包装在中的数据时clickedItem,我发现它包含的是上次更改的数据,而不是导致DialogFragment触发的最新数据在开始利用中的最新数据之前clickedItem,我被迫浏览了存储在中的所有数据clickedItem

阿布舍克·乌杜帕

我找到了解决此问题的方法,如下所示:

我没有在方法中调用bindView(viewModel.clickedItem.value!!)in onCreateDialog(savedInstanceState: Bundle?),而是在onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?)方法中调用了

override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        bindView(viewModel.clickedItem.value!!)
        return binding.root
    }

这样就解决了问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在DialogFragment中观察ViewModel LiveData?

来自分类Dev

如何通过ViewModel从Fragment观察Repository LiveData

来自分类Dev

从 LifeCycleService 观察 LiveData

来自分类Dev

通过观察ViewModel在RecyclerView中搜索PagedList的LiveData

来自分类Dev

我的片段中无法从ViewModel观察LiveData <MutableList <T >>

来自分类Dev

ViewModel,LiveData出现问题

来自分类Dev

Android MVVM,您可以使用另一个 LiveData 对象观察 ViewModel 中的 LiveData 吗?

来自分类Dev

Android Room LiveData观察器未更新

来自分类Dev

在onActivityCreated或onViewCreated内部观察LiveData是否安全?

来自分类Dev

多个LiveData观察者调用序列

来自分类Dev

为什么 LiveData 在 ViewModel 中返回 null?

来自分类Dev

LiveData + ViewModel + Room:暴露查询返回的LiveData,该查询随时间变化(通过fts搜索)

来自分类Dev

在ViewModel Swift(Reactive Cocoa 3.0)中观察鼠标事件

来自分类Dev

如何在ViewModel中观察Repository类的返回值?

来自分类Dev

在ViewModel Swift(Reactive Cocoa 3.0)中观察鼠标事件

来自分类Dev

Android RecyclerView SubmitList无法在LiveData观察器中更新数据

来自分类Dev

每次返回片段时都会调用livedata观察器

来自分类Dev

Kotlin-在运行功能之前等待观察多个LiveData

来自分类Dev

(可变)LiveData未在UI上观察到

来自分类Dev

LiveData观察器发生更改而不是保持不变的问题

来自分类常见问题

如何从后台服务和更新UI更新ViewModel的LiveData

来自分类Dev

MVVM:尝试使用LiveData加载数据时,ViewModel为null

来自分类Dev

为什么我们需要 LiveData 和 ViewModel

来自分类Dev

Transformations.map 与 Androidx 中的 ViewModel 和 LiveData(问题)

来自分类Dev

如何在Android的会议室数据库中更改LiveData可观察的查询参数?

来自分类Dev

导航控制器在livedata观察器中被调用两次

来自分类Dev

设置LiveData的多个并发调用中的某些未观察到

来自分类Dev

使用Android分页库时,无法正确观察LiveData(获取null)

来自分类Dev

我需要将什么设置为 android.arch.lifecycle.LiveData 观察方法?

Related 相关文章

  1. 1

    如何在DialogFragment中观察ViewModel LiveData?

  2. 2

    如何通过ViewModel从Fragment观察Repository LiveData

  3. 3

    从 LifeCycleService 观察 LiveData

  4. 4

    通过观察ViewModel在RecyclerView中搜索PagedList的LiveData

  5. 5

    我的片段中无法从ViewModel观察LiveData <MutableList <T >>

  6. 6

    ViewModel,LiveData出现问题

  7. 7

    Android MVVM,您可以使用另一个 LiveData 对象观察 ViewModel 中的 LiveData 吗?

  8. 8

    Android Room LiveData观察器未更新

  9. 9

    在onActivityCreated或onViewCreated内部观察LiveData是否安全?

  10. 10

    多个LiveData观察者调用序列

  11. 11

    为什么 LiveData 在 ViewModel 中返回 null?

  12. 12

    LiveData + ViewModel + Room:暴露查询返回的LiveData,该查询随时间变化(通过fts搜索)

  13. 13

    在ViewModel Swift(Reactive Cocoa 3.0)中观察鼠标事件

  14. 14

    如何在ViewModel中观察Repository类的返回值?

  15. 15

    在ViewModel Swift(Reactive Cocoa 3.0)中观察鼠标事件

  16. 16

    Android RecyclerView SubmitList无法在LiveData观察器中更新数据

  17. 17

    每次返回片段时都会调用livedata观察器

  18. 18

    Kotlin-在运行功能之前等待观察多个LiveData

  19. 19

    (可变)LiveData未在UI上观察到

  20. 20

    LiveData观察器发生更改而不是保持不变的问题

  21. 21

    如何从后台服务和更新UI更新ViewModel的LiveData

  22. 22

    MVVM:尝试使用LiveData加载数据时,ViewModel为null

  23. 23

    为什么我们需要 LiveData 和 ViewModel

  24. 24

    Transformations.map 与 Androidx 中的 ViewModel 和 LiveData(问题)

  25. 25

    如何在Android的会议室数据库中更改LiveData可观察的查询参数?

  26. 26

    导航控制器在livedata观察器中被调用两次

  27. 27

    设置LiveData的多个并发调用中的某些未观察到

  28. 28

    使用Android分页库时,无法正确观察LiveData(获取null)

  29. 29

    我需要将什么设置为 android.arch.lifecycle.LiveData 观察方法?

热门标签

归档