gpt4 book ai didi

android - 在 Android 导航组件中使用 navigateUp 传递数据/包

转载 作者:太空宇宙 更新时间:2023-11-03 13:07:46 25 4
gpt4 key购买 nike

I found the question but does not have solution in code

我想在发生背压/手动后退时获得数据。我正在使用 navigateUp() 返回。如何将数据传递到上一个 fragment ? navigateUp() 没有任何功能可以将数据传递到前一个 fragment 。即使我没有找到使用 Safe Args 的解决方案.它正在向前传递数据。我想要向后的 Frad B -> Frag A。

返回上一个 fragment 的代码

Navigation.findNavController(view).navigateUp()

enter image description here

我的问题是,如何获取前一个 fragment 中的数据。我可以使用

从 fragment B 导航到 fragment A

最佳答案

根据 developer.android.com ,您可以对要共享数据的 fragment 使用 common ViewModel使用他们的 Activity 范围。

步骤如下:

  1. 创建将保留数据的 View 模型:
class SharedViewModel : ViewModel() {
val dataToShare = MutableLiveData<String>()

fun updateData(data: String) {
dataToShare.value = data
}
}
  1. 观察 Fragment1 中的数据变化:
class Fragment1 : Fragment() {

private lateinit var viewModel: SharedViewModel

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel = ViewModelProviders.of(activity!!).get(SharedViewModel::class.java)
viewModel.dataToShare.observe(this, Observer<String> { dataFromFragment2 ->
// do something with data
})
}
}
  1. 更新 Fragment2 中的数据,如果您正确处理导航,现在,您应该能够接收 Fragment1 中的数据更改:
class Fragment2 : Fragment() {

private lateinit var viewModel: SharedViewModel

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel = ViewModelProviders.of(activity!!).get(SharedViewModel::class.java)

updateDataButton.setOnClickListener { v ->
viewModel.updateData("New data for fragment1")
}
}
}

希望回答对您有所帮助。

关于android - 在 Android 导航组件中使用 navigateUp 传递数据/包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55058689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com