Android:当用户在导航组件、单活动应用程序中回击片段 B 时更新片段 A
Posted
技术标签:
【中文标题】Android:当用户在导航组件、单活动应用程序中回击片段 B 时更新片段 A【英文标题】:Android: Update Fragment A when user hits back on Fragment B in Navigation Component, Single activity app 【发布时间】:2021-07-20 10:53:28 【问题描述】:我有以下要求:片段 A 显示来自 API 调用的所有推荐朋友,它调用 onCreateView。用户可以从 Fragment A -> Fragment B 导航。在 Fragment B 中,用户可以推荐新朋友。当用户推荐朋友时,我会调用 API 并触发 activity.onBackPressed() 以弹出 Back to Fragment A。
返回 Fragment 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()
【问题讨论】:
您能否分享您在片段 A 中调用 API 的代码? 【参考方案1】:你可以在你的第一个片段中使用它。
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 。
【讨论】:
片段 B 内的 onBackPressed() 不工作。如何使用? @ShyamalyLakhadive 你是什么意思? 此解决方案适用于 android.R.id.home。但我也想用 onBackPressed() 来实现它,因为同样的操作也应该用 onBackPressed() 来执行。以上是关于Android:当用户在导航组件、单活动应用程序中回击片段 B 时更新片段 A的主要内容,如果未能解决你的问题,请参考以下文章
从活动向上导航到片段打开相同的片段 - Android 导航组件