【问题标题】:android: Observe 2 variablesandroid:观察2个变量
【发布时间】:2020-01-03 00:42:57
【问题描述】:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

// ViewModelFolder.selectFolder is MutableLiveData<String>
ViewModelFolder.selectFolder.observe(viewLifecycleOwner, Observer { name ->
  name?.let {
    taskViewModel.getTasksByFolder(it, false)
      .observe(viewLifecycleOwner, Observer { tasks ->
        tasks?.let { taskAdapter.setTasks(it) }
      })
    }
  })
}

ViewModelFolder.selectFolder 或任务发生变化时,我想致电taskViewModel.getTasksByFolder。但是,内部观察者被多次调用。 我该如何解决?

【问题讨论】:

    标签: android sql kotlin rx-java android-room


    【解决方案1】:

    我认为 MediatorLiveData 可能有助于解决这个问题。

    在你的视图模型中写一个这样的函数。

    fun mergeResult(): MediatorLiveData<String> {
            val mediatorLiveData = MediatorLiveData<String>()
            var result = ""
    
            mediatorLiveData.addSource(selectFolder) {
                // your logic goes here.
                result = ...
            }
    
            mediatorLiveData.addSource(getTasksByFolder) {
                // your logic goes here.
                result = ...
            }
    
            mediatorLiveData.value = result
    
            return mediatorLiveData
        }
    

    并在你的片段中观察它。

    viewmodel.mergeResult().observe(viewLifecycleOwner, Observer {
     . . .
    }
    

    【讨论】:

    • 感谢您的建议,但它不起作用。我也想返回 LiveData>>.
    猜你喜欢
    • 1970-01-01
    • 2016-02-07
    • 1970-01-01
    • 2018-04-18
    • 1970-01-01
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多