使用默认导航抽屉 activity 模板将片段替换为另一个片段
Replace fragment by another using default navigation drawer activity template
我有一个导航抽屉,它使用从 Android Studio 中的默认“导航抽屉 Activity”模板创建的片段。在片段A中,我想打开另一个片段B。所以片段B必须替换片段A。我在google上看到,我应该使用FrameLayout来动态改变当前显示的片段。
<FrameLayout
android:id="@+id/nav_host_frame_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:navGraph="@navigation/mobile_navigation" />
</FrameLayout>
要更改片段,我使用下面的代码,当我单击要替换的片段中的按钮时
NewCalendarEvent newEventFrag = new NewCalendarEvent();
getActivity().getSupportFragmentManager().beginTransaction()
.replace(R.id.nav_host_frame_layout, newEventFrag)
.addToBackStack(null)
.commit();
目前,当我点击按钮时,会显示两个片段。是因为我同时使用了 fragment 和 frameLayout 吗?我做错了什么?
如果您通过 NavController
上的 API 使用 NavHostFragment
和 Navigation Component, then you never use a FragmentTransaction
. Instead you navigate to a screen。
我有一个导航抽屉,它使用从 Android Studio 中的默认“导航抽屉 Activity”模板创建的片段。在片段A中,我想打开另一个片段B。所以片段B必须替换片段A。我在google上看到,我应该使用FrameLayout来动态改变当前显示的片段。
<FrameLayout
android:id="@+id/nav_host_frame_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:navGraph="@navigation/mobile_navigation" />
</FrameLayout>
要更改片段,我使用下面的代码,当我单击要替换的片段中的按钮时
NewCalendarEvent newEventFrag = new NewCalendarEvent();
getActivity().getSupportFragmentManager().beginTransaction()
.replace(R.id.nav_host_frame_layout, newEventFrag)
.addToBackStack(null)
.commit();
目前,当我点击按钮时,会显示两个片段。是因为我同时使用了 fragment 和 frameLayout 吗?我做错了什么?
如果您通过 NavController
上的 API 使用 NavHostFragment
和 Navigation Component, then you never use a FragmentTransaction
. Instead you navigate to a screen。