Bha*_*ara 4 android android-fragments android-architecture-navigation android-safe-args
我想在有backpress / manual back发生时获取数据。我navigateUp()
过去经常回去。如何将数据传递到上一个片段?navigateUp()
没有任何工具可以将数据传递到上一个片段。甚至我也没有找到使用Safe Args的解决方案。它正在转发数据。我想在向后的Frad B-> Frag A中使用。
我的代码回到上一个片段
Navigation.findNavController(view).navigateUp()
Run Code Online (Sandbox Code Playgroud)
我的问题是,如何获取上一个片段中的数据。我可以使用以下方法从Frag B导航至Frag A
请使用官方androidx的组件。setFragmentResultListener()和setFragmentResult()方法:
implementation "androidx.fragment:fragment-ktx:1.3.5"
Run Code Online (Sandbox Code Playgroud)
干杯;)
根据developer.android.com,您可以将common用于要使用其活动范围共享数据ViewModel的片段。
步骤如下:
class SharedViewModel : ViewModel() {
val dataToShare = MutableLiveData<String>()
fun updateData(data: String) {
dataToShare.value = data
}
}
Run Code Online (Sandbox Code Playgroud)
class Fragment1 : Fragment() {
private lateinit var viewModel: SharedViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewModel = ViewModelProviders.of(activity!!).get(SharedViewModel::class.java)
viewModel.dataToShare.observe(this, Observer<String> { dataFromFragment2 ->
// do something with data
})
}
}
Run Code Online (Sandbox Code Playgroud)
Fragment2
并且如果您能正确处理导航,现在,您应该能够接收有关的数据更改Fragment1
:class Fragment2 : Fragment() {
private lateinit var viewModel: SharedViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewModel = ViewModelProviders.of(activity!!).get(SharedViewModel::class.java)
updateDataButton.setOnClickListener { v ->
viewModel.updateData("New data for fragment1")
}
}
}
Run Code Online (Sandbox Code Playgroud)
我希望答案会有所帮助。
归档时间: |
|
查看次数: |
1341 次 |
最近记录: |