【问题标题】:Replace fragment by another using default navigation drawer activity template使用默认导航抽屉活动模板将片段替换为另一个片段
【发布时间】:2021-10-30 05:43:24
【问题描述】:

我有一个导航抽屉,它使用从 Android Studio 中默认的“导航抽屉活动”模板创建的片段。在一个fragment A里面,我想再打开一个fragment B。所以fragment B必须替换fragment A。我在google上看到,应该使用FrameLayout来动态改变当前显示的fragment。

    <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 吗?我做错了什么?

【问题讨论】:

    标签: java android replace fragment navigation-drawer


    【解决方案1】:

    如果您使用的是NavHostFragmentNavigation Component,则永远不要使用FragmentTransaction。相反,您可以使用 NavController 上的 API 来 navigate to a screen

    【讨论】:

    • 非常感谢,这样就可以了!
    猜你喜欢
    • 1970-01-01
    • 2020-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    相关资源
    最近更新 更多