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

切换片段后BottomNavigation不工作

丁翰海
2023-03-14

我是Android Studio的新手,目前正在开发我的第一个应用程序。我首先添加了Android Studio提供的BottomNavigationActivity。片段应该显示一个项目列表,可以通过按钮添加(这会打开一个新片段,在该片段中可以通过单击按钮创建新项目并将其添加到列表中)-

我有2个导航文件:

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/mobile_navigation"
    app:startDestination="@+id/navigation_kalender">

    <fragment
        android:id="@+id/navigation_habits"
        android:name="com.example.bottomtest.ui.habits.HabitsFragment"
        android:label="@string/title_habits"
        tools:layout="@layout/fragment_habits" />

    <fragment
        android:id="@+id/navigation_kalender"
        android:name="com.example.bottomtest.ui.kalender.KalenderFragment"
        android:label="@string/title_kalender"
        tools:layout="@layout/fragment_kalender" />

    <fragment
        android:id="@+id/navigation_notizen"
        android:name="com.example.bottomtest.ui.notizen.NotizenFragment"
        android:label="@string/title_notizen"
        tools:layout="@layout/fragment_notizen" />
</navigation>
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/notizen_navigation"
    app:startDestination="@id/notizenFragment">

    <fragment
        android:id="@+id/notizenBearbeitenFragment"
        android:name="com.example.bottomtest.ui.notizen.NotizenBearbeitenFragment"
        android:label="fragment_notizen_bearbeiten"
        tools:layout="@layout/fragment_notizen_bearbeiten" >
        <action
            android:id="@+id/action_notizenBearbeitenFragment_to_notizenFragment"
            app:destination="@id/notizenFragment" />
    </fragment>
    <fragment
        android:id="@+id/notizenFragment"
        android:name="com.example.bottomtest.ui.notizen.NotizenFragment"
        android:label="fragment_notizen"
        tools:layout="@layout/fragment_notizen" >
        <action
            android:id="@+id/action_notizenFragment_to_notizenBearbeitenFragment"
            app:destination="@id/notizenBearbeitenFragment" />
    </fragment>
</navigation>

这是我在创建时的主要活动:

        binding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        BottomNavigationView navView = findViewById(R.id.nav_view);

        AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(
                R.id.navigation_habits, R.id.navigation_kalender, R.id.navigation_notizen)
                .build();
        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_activity_main);
        NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
        NavigationUI.setupWithNavController(binding.navView, navController);
    }

这是我在片段中创建的OnViewCreated:

        binding.newNoteButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                NotizenBearbeitenFragment notizenBearbeitenFragment = new NotizenBearbeitenFragment();
                FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
                ft.replace(R.id.container, notizenBearbeitenFragment);
                ft.addToBackStack(null);
                ft.commit();
            }
        });
    }

如果这是一个愚蠢的问题,我很抱歉,但我自己找不到解决方案,非常感谢任何帮助!

共有1个答案

东郭腾
2023-03-14

使用导航库时,不要自己触摸FragmentManager
让导航管理片段之间的导航,这就是它的用途。

消息

I/FragmentNavigator:忽略navigate()调用:FragmentManager已保存其状态

在androidx中定义。航行碎片碎片导航器#导航碎片状态由活动保存。它通常在活动进入停止状态时出现。离开当前活动后,碎片管理器不应操作方法。(但仍然可以使用androidx.fragment.app.FragmentTransaction#commitAllowingStateLoss来忽略警告,但在重新创建活动时不会恢复此状态。)

在您的场景中,我建议跳到下一个活动来编辑、返回和刷新列表

 类似资料:
  • 我希望能够使用导航抽屉,并根据导航中的选择在不同片段之间进行更改。 我正在使用Android Studio,基本上我所做的是这样的: 使用内置模板“导航抽屉活动”创建了一个新项目 创建了一个空白片段 然后我更改了onNavigationDrawerItemSelected方法中的一些代码。 我的程序崩溃了,给了我很多我不理解的错误。我做错了什么?

  • 我有一个带有底栏的main_activity。我正在使用这个底栏在片段之间导航。然而,有一个片段不能通过底部栏直接导航。它必须通过MapView和从片段中访问。然而,每当我使用InfoWindow时,该应用程序就会崩溃。这是我的代码 异常:main process:com.teslaqubitsins.fasih.teslahcm,pid:2573 java.lang.nullpointerexc

  • .替换(...,Frag2,...) -->frag2 -->frag1

  • 每当我在eclipse上切换工作区时,我都会得到错误: 期间发生内部错误:“正在初始化 Java 工具”。重复的字段名称 如果我重启Eclipse,它就会正确地加载新的工作区。你知道我该怎么解决这个问题吗? 我在视窗 7 上使用日食开普勒

  • 编辑:我的滑动标签碎片ATabs似乎有问题。没有使用ATabs片段,只需使用导航抽屉在片段A1和B之间切换,一切都很好!可以添加列表项。编辑的主要活动: 但当我使用ATabs片段(见下面的MainActivity)并切换到它并返回时,就不可能再添加ListItems了。尽管Logcat显示日志。v(LOG_标签,“添加项”) 每次按add()。 我不知道是什么导致了这个问题。如果ATabs需要是一