【发布时间】:2021-03-20 08:34:53
【问题描述】:
我尝试从RecordRouteFragment 转到SaveRouteFragment。结果是两个片段相互重叠。
我在互联网上搜索并没有找到我的问题的答案,尽管有些人遇到了类似的重叠问题。
fragment_record_route.xml:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".features.routerecording.ui.RecordRouteFragment">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/cl_frg_container">
// content
</FrameLayout>
</LinearLayout>
fragment_save_route.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
// content
</androidx.constraintlayout.widget.ConstraintLayout>
来自 RecordRouteFragment.kt 的 onClickListener
private val btStopRecordOnClick = View.OnClickListener() {
stopLocationService()
viewModel.markRouteAsNotCurrent()
childFragmentManager.commit {
replace<SaveRouteFragment>(binding.clFrgContainer.id) //when I replace that with usual R.id.cl_frg_container - nothing changes
setReorderingAllowed(true)
addToBackStack("Save a route") // name can be null
}
}
我做错了什么?
【问题讨论】:
-
看来您必须使用
fragmentManager而不是childFragmentManager -
@AndreiTanana 它不起作用。 Docs:片段也能够托管一个或多个子片段。在 Fragment 内部,您可以通过 getChildFragmentManager() 获得对管理 Fragment 子项的 FragmentManager 的引用。如果需要访问它的宿主FragmentManager,可以使用getParentFragmentManager()。 developer.android.com/guide/fragments/fragmentmanager
-
当然片段可以有嵌套片段。我以为您想将
SaveRouteFragment更改为SaveRouteFragment。对我来说,现在你在SaveRouteFragment中添加SaveRouteFragment
标签: android kotlin android-fragments fragmentmanager