使用默认导航抽屉 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 使用 NavHostFragmentNavigation Component, then you never use a FragmentTransaction. Instead you navigate to a screen