使用Android导航组件中的navigationUp传递数据/捆绑 [英] Pass data/bundle using navigateUp in Android Navigation Component
问题描述
当要进行后按/手动后退时,我想获取数据.我正在使用navigateUp()
返回.如何将数据传递到上一个片段? navigateUp()
没有任何工具可以将数据传递到上一个片段.甚至我都没有找到使用安全Args 的解决方案一个>.它正在转发数据.我想在向后的Frad B中-> Frag A.
I want to have data when backpress/manual back happens. I am using navigateUp()
to go back. How can I pass data to previous fragment? navigateUp()
does not have any facility to pass data to previous fragment. Even I did not find solution using Safe Args. It's passing data forward. I want to have in backward Frad B -> Frag A.
我的代码返回上一个片段
My code to go back to previous fragment
Navigation.findNavController(view).navigateUp()
我的问题是,我如何获取上一个片段中的数据.我可以使用
My question is, How can i get data in previous fragment. I can navigate to Frag A from Frag B using
推荐答案
根据 developer.android.com ,您可以将common用于要共享数据的片段 ViewModel 使用其活动范围.
According to developer.android.com, you can use common for fragments where you want to share data ViewModel using their activity scope.
以下是步骤:
- 创建将保留数据的视图模型:
class SharedViewModel : ViewModel() {
val dataToShare = MutableLiveData<String>()
fun updateData(data: String) {
dataToShare.value = data
}
}
- 观察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
})
}
}
- 更新
Fragment2
中的数据,现在,如果您正确地处理了导航,则应该能够在Fragment1
上接收数据更改:
- Update data in
Fragment2
and if you're handling navigation properly, now, you should be able to receive data changes onFragment1
:
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")
}
}
}
我希望答案会有所帮助.
I hope answer helps.
这篇关于使用Android导航组件中的navigationUp传递数据/捆绑的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!