我想从 FragmentA(RootFragment)转到 FragmentB ,但是我不想在FragmentA返回FragmentA后重新创建FragmentA的视图。
我正在使用Jetpack导航在片段之间导航。
为了实现上述目标,我有一个像这样的片段片段:
class RootFragment : DaggerFragment() {
private var viewToRestore: View? = null
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
return if (viewToRestore != null) {
viewToRestore!!
} else {
return inflater.inflate(R.layout.fragment_root, parent, false)
}
}
override fun onDestroyView() {
viewToRestore = this.view
super.onDestroyView()
}
override fun onDestroy() {
super.onDestroy()
}
}
但是,一旦我到达具有属性 viewToRestore 的片段B 时, FragmentA (RootFragment)正在泄漏。
有没有解决方案但可以实现相同目标的解决方案?
答案 0 :(得分:0)
您遇到的问题是Jetpack导航的问题,因为在转到另一个可以替换的片段时无法添加:
supportFragmentManager.beginTransaction()
.replace(R.id.fragment_container, FragmentB.newInstance())
.addToBackStack(null)
.commit()
supportFragmentManager.beginTransaction()
.add(R.id.fragment_container, FragmentB.newInstance())
.addToBackStack(null)
.commit()
这是replace
和add
的区别。
我进行了很多搜索,我猜想jetPack导航不支持add
而不是replace
,因此,当重要的是不要重新创建第一个片段时,我建议不要使用导航
答案 1 :(得分:0)
泄漏是误报。从Fragment的角度来看,最好保留在onCreateView
中创建的View,然后在不保留Fragment或将其保留的时间长于用于创建视图的Context的情况下,将其返回。活着。