如何解决Android:当用户点击导航组件中的片段 B 时更新片段 A,单一活动应用
我有以下要求:片段 A 显示所有从 API 调用中推荐的朋友,它调用 onCreateView。用户可以从片段 A -> 片段 B 导航。在片段 B 中,用户可以推荐新朋友。当用户推荐朋友时,我会调用 API 并触发 activity.onBackPressed() 以弹出 Back to Fragment A。
在片段 A 中返回时,我需要进行 API 调用以让所有推荐的朋友更新 UI。不幸的是,当我弹回时,onCreateView()、onResume() 和 onStart() 都没有被调用。如何进行新的 API 调用并更新 UI?
片段 A:
override fun onViewCreated(view: View,savedInstanceState: Bundle?) {
super.onViewCreated(view,savedInstanceState)
viewModel = ViewModelProvider(this).get(ReferAFriendViewModel::class.java)
viewModel.getRAFStatus().observe(viewLifecycleOwner,{
//UpdateUI
})
}
片段 B:
viewModel.postSendInvites(binding.etName.text.toString(),binding.etEmail.text.toString())
requireActivity().onBackPressed()
解决方法
您可以在第一个片段中使用它。
findNavController().currentBackStackEntry?.savedStateHandle?.getLiveData<Type>("key")?.observe(
viewLifecycleOwner) {result ->
// Do something with the result.
}
在你的第二个片段中。
findNavController().previousBackStackEntry?.savedStateHandle?.set("key",result)
我最终为它创建了两个扩展函数。
fun <T> Fragment.getCurrentBackStackEntryLiveData(key: String): MutableLiveData<T>? {
return findNavController().currentBackStackEntry?.savedStateHandle?.getLiveData(key)
}
fun <T> Fragment.setCurrentBackStackEntryLiveData(key: String,value: T) {
findNavController().previousBackStackEntry?.savedStateHandle?.set(key,value)
}
这是相同的 link。
,使用 MVVM 和 SharedViewModel。 有关详细信息,请参阅 this 链接。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。