【发布时间】:2020-01-19 00:00:15
【问题描述】:
我正在使用导航库,我的用例是在后按时保留片段状态,我通过在 onViewCreated 中返回已经膨胀的绑定来实现,因为当更改片段导航似乎不会破坏该片段的现有实例时,实际视图变量存在时你在那里导航回来或向上。
但是当我需要重新创建此 Fragment 实例时,我也有一个用例,因此我希望有一种方法可以为该 Fragment 调用 onDestroy()。但我没有看到任何用于删除/获取 backstack 实例中现有的 api。
所以我的问题是如何从导航返回堆栈中获取片段的现有实例并将其销毁,或者通过调用导航控制器 api 将其删除。
一些代码:
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
viewModel = ViewModelProviders.of(requireActivity(), mViewModelFactory)
.get(MainViewModel::class.java)
parseNavigationExtra()
return if (::mBinding.isInitialized) {
mBinding.root
} else {
//create new binding
}
所以当我调用这个动作时,我仍然会得到旧的绑定根,因为变量仍然存在。
<action
android:id="@+id/clearBackStack"
app:destination="@+id/mainFragment"
app:launchSingleTop="true"
app:popUpTo="@+id/mobile_navigation"
app:popUpToInclusive="true" />
【问题讨论】:
标签: android android-fragments navigation android-jetpack