当前位置: 首页 > 知识库问答 >
问题:

第一个片段被第二个片段替换后,如何打开导航抽屉

帅令雪
2023-03-14

我已经创建了默认的Android Studio导航抽屉项目。默认情况下,我有一个活动和三个主要片段。(家庭,画廊,幻灯片),我只是尝试与家庭片段。我已经将 从content_main XML替换为

<androidx.fragment.app.FragmentContainerView
    android:id="@+id/nav_host_fragment_content_main"
    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" /> 

并将MainActivity修改为

//inside onCreate
NavHostFragment navHostFragment = (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment_content_main);

    NavController navController;
    if (navHostFragment != null) {
        navController = navHostFragment.getNavController();
        NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
        NavigationUI.setupWithNavController(navigationView, navController);
    } else {
        Log.e("Error", "Failed on NULL NavController");
    }
@Override
public boolean onSupportNavigateUp() {
    NavHostFragment navHostFragment = (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment_content_main);
    assert navHostFragment != null;
    return NavigationUI.navigateUp(navHostFragment.getNavController(), mAppBarConfiguration)
            || super.onSupportNavigateUp();
}
binding.button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Log.d("onClick: ", "Clicked");
            BlankFragment blankFragment = new BlankFragment();
            requireActivity().getSupportFragmentManager().beginTransaction()
                    .replace(R.id.nav_host_fragment_content_main, blankFragment, null)
                    .addToBackStack("blank").commit();
        }
    });
java.lang.ClassCastException: BlankFragment cannot be cast to androidx.navigation.fragment.NavHostFragment

共有1个答案

皇甫福
2023-03-14

正如Zain在评论中建议的那样,我尝试使用NavController。试了下面的,它似乎工作,为其他人张贴。https://learntodroid.com/how-to-move-better-fragments-using-the-navigation-component/

 类似资料:
  • 我正在使用developer.android.com指南来构建一个应用程序。我在Android Studio做新项目时选择了“导航:导航抽屉”。我已经在互联网上搜索我的问题的答案,但我没有找到任何有效的。抱歉,我是编程新手。 在导航抽屉中单击时,如何使应用程序在主视图中打开一个新的片段? 在导航抽屉中单击时,是否可以使用选项卡打开多个可滑动的片段? 如何使“标题”可展开/可折叠? http://d

  • 我想按下mainactivity中的一个按钮,该按钮将启动一个包含片段的新活动的意图。我写了一个主要的活动。带有main活动和第二个_活动按钮的xml。带有片段的xml。当我单击按钮时,第二个活动将由于xml中的片段而崩溃。我已经添加了一个标志,但它没有帮助。该应用程序的想法是通过按下主活动中的按钮,在第二个活动中获取谷歌地图。 我希望你能帮助我:/ 主要活动: 亚活性: activity_mai

  • 在我的应用程序中,我有两个片段,分别是fragmentA和FragmentB。当我点击fragmetA中的按钮时,fragmentB中会打开一个列表。现在,当我从fragmentB中的列表中选择一个项目时,我希望将结果传递给fragmentA。我只对所有片段使用一个TabActivity。当列表项在fragmentB中被选中时,我将从堆栈中弹出fragmentB,以便直接返回fragmentA。

  • 我有一个事件序列,通过它,我已经将三个片段一个接一个地添加到背景堆栈中。这些片段,每一个都覆盖了活动的全屏。 我已经存储了从Frag1的提交返回。 现在在Frag3中,基于特定的单击,我想直接回到Frag1并丢弃/弹出之间的所有Fragments。 因此,单击此按钮时,我会向活动发送一条消息,该消息执行以下操作: 但我只是得到一个空白屏幕,所以我假设没有加载碎片。 我甚至试过:在commit-

  • 我的中有10个选项卡。打开活动后,第一个片段就会显示出来,但下一个片段中的方法(AsyncTask)会被调用。如果我转到下一个选项卡,比如第3个选项卡,那么将调用第4个中的方法,依此类推。 我不理解这种行为。请救命!

  • 我试图通过活动中按钮的onclick事件将一个主片段替换为另一个片段,但该片段恰好悬停在主片段上。 这是我的密码