android - 片段未在后台堆栈中注册
问题描述
我有以下方法
// Change fragment extension function to handle navigation easily
fun changeFragment(fragmentManager: FragmentManager?, @IdRes containerId: Int, fragment: Fragment?, addToBackStack: Boolean = false) {
if (fragmentManager == null || fragment == null) return
val fragmentTransaction = fragmentManager.beginTransaction()
if (addToBackStack) fragmentTransaction.addToBackStack(null)
fragmentTransaction.replace(containerId, fragment, fragment::class.java.simpleName).commit()
}
我在我的一个片段中使用它-
class InspectionFragment : Fragment(R.layout.fragment_inspection) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
inspectionAdapter = InspectionAdapter { inspection ->
changeFragment(
parentFragmentManager, R.id.fragment_inspection_frame_layout,
InspectionDetailsFragment.newInstance(inspection), true
)
}
}
}
class InspectionDetailsFragment : Fragment() {
companion object {
fun newInstance(inspection: Inspection): InspectionDetailsFragment {
val inspectionDetailsFragment = InspectionDetailsFragment()
val bundle = Bundle()
bundle.putParcelable(GeneralConstants.INSPECTION, inspection)
inspectionDetailsFragment.arguments = bundle
return inspectionDetailsFragment
}
}
}
问题是,当我在“InspectionDetailsFragment”层的一个顶部实例化另一个片段并按回时,它直接返回到“InspectionFragment”父级。
我不明白为什么会这样。
有人有想法吗?
解决方案
当您调用 changeFragment 函数时,您将 true 作为最后一个参数传递:
changeFragment(
parentFragmentManager, R.id.fragment_inspection_frame_layout,
InspectionDetailsFragment.newInstance(inspection), true
)
在 changeFragment 函数中:
if (addToBackStack) fragmentTransaction.addToBackStack(null)
它不会被添加到 backStack。而不是 null 我认为您应该将 String 值作为您要使用的 backStack 的名称传递。
我对此不是 100% 确定的。您可以从此处阅读有关片段事务的更多信息:https ://developer.android.com/guide/fragments/transactions
推荐阅读
- html - 阻止表单自动提交
- python - GridCellBoolRenderer 已被删除 - wxPython Grid 示例
- javascript - 对象解构花括号内的等号
- angular - 如何像 ios 一样在角度上制作时间选择器?
- google-sheets-api - 如何使电子表格的A列显示月份的名称,该行是哪个索引?
- flutter - 使用`flutter drive`时如何捕获异常?
- reactjs - 反应按钮以显示元素
- flutter - Flutter - 获取文本字段中光标的坐标
- firefox-addon-webextensions - 使用 GeckoView 的 HtmlPage 和 AndroidApp 之间的消息
- python - 使用值聚合 Django 中的更改列表行