如何在两个片段之间共享数据?遇到 MVVM 架构问题

How to share data between two fragments? Having trouble with the MVVM architecture

目前我有两个片段,一个显示某个地方的天气,另一个让你 select 地图中的一个点并将你重定向到另一个显示该点天气的片段。

我想要实现的是在默认情况下拥有用户的位置,并通过转到 select 任何其他地方的地图为用户提供选项。所以我想:

我相信我可以粗略地将 getters/setters 添加到我的 activity,然后在片段中将 activity 投射到我的特定 activity。但这似乎很糟糕。正确的方法是什么? 我现在拥有的:

我正在使用 dagger 和 kotlin。

谢谢!

使用 activity 范围

ForecastFragmentMapFragment 之间共享一个公共视图模型

看看这里提供的例子Share data between fragments

class SharedViewModel : ViewModel() {
    val selected = MutableLiveData<Item>()

    fun select(item: Item) {
        selected.value = item
    }
}

class MasterFragment : Fragment() {

    private lateinit var itemSelector: Selector

    // Use the 'by activityViewModels()' Kotlin property delegate
    // from the fragment-ktx artifact
    private val model: SharedViewModel by activityViewModels()

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        itemSelector.setOnClickListener { item ->
            // Update the UI
        }
    }
}

class DetailFragment : Fragment() {

    // Use the 'by activityViewModels()' Kotlin property delegate
    // from the fragment-ktx artifact
    private val model: SharedViewModel by activityViewModels()

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        model.selected.observe(viewLifecycleOwner, Observer<Item> { item ->
            // Update the UI
        })
    }
}

注:

Both fragments must handle the scenario where the other fragment is not yet created or visible.