带有Jetpack导航的底部导航菜单在Android系统中导致问题

带有Jetpack导航的底部导航菜单在Android系统中导致问题,android,android-jetpack,bottomnavigationview,Android,Android Jetpack,Bottomnavigationview,我尝试使用Jetpack导航在我的应用程序中实现底部导航菜单。我遵循了本教程的每个步骤,但不幸的是,我无法集成到我的应用程序中,并且在启动应用程序时出错 java.lang.RuntimeException: Unable to start activity ... Caused by: java.lang.NullPointerException: Attempt to read from field 'com.google.android.material.bottomnavig

我尝试使用Jetpack导航在我的应用程序中实现底部导航菜单。我遵循了本教程的每个步骤,但不幸的是,我无法集成到我的应用程序中,并且在启动应用程序时出错

java.lang.RuntimeException: Unable to start activity ...

     Caused by: java.lang.NullPointerException: Attempt to read from field 'com.google.android.material.bottomnavigation.BottomNavigationView com.example.td.barapp.databinding.ActivityMainBinding.bottomNavigation' on a null object reference
        at com.example.td.barapp.MainActivity.onCreate(MainActivity.java:28)
错误指向我的主要活动,该活动包含以下java代码:

package com.example.td.barapp;

import androidx.appcompat.app.AppCompatActivity;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.NavigationUI;

import android.os.Bundle;

import com.example.td.barapp.databinding.ActivityMainBinding;


public class MainActivity extends AppCompatActivity  {

   
    private ActivityMainBinding binding;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        DataBaseEntries.createDataBaseEntries(drinksDB);

        NavController navController = Navigation.findNavController(this, R.id.navHostfragment);

        NavigationUI.setupWithNavController(binding.bottomNavigation,navController );


    }
}
所以它说导航控制器是空的。为什么它是空的,如何使它不为空

在这里,您可以看到带有NavHostFragment的主活动的XML文件:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    tools:ignore="ExtraText">


    <fragment
        android:id="@+id/navHostfragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:defaultNavHost="true"
        app:layout_constraintBottom_toTopOf="@+id/bottom_navigation"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:navGraph="@navigation/nav_graph" />

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/bottom_navigation"
        app:labelVisibilityMode="labeled"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/colorGreen"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:menu="@menu/bottom_navigation"
        app:itemIconTint="@color/colorPrimaryDark"
        app:itemTextColor="@color/colorAccent"
        />
</androidx.constraintlayout.widget.ConstraintLayout>

在这里您可以看到ButtonNavigationMenu的XML文件,其中我将目标链接到NavGraph的ID(android:ID=“@+ID/FR_LanguageSelection”):



你知道为什么我不能启动应用程序并得到这个错误吗?如果Java代码中没有BottomNavigationMenu,应用程序就会工作,并且BottomNavigationView显示正确(但我当然不能将其用于导航)。我非常感谢您的每一个回答,也非常感谢您的帮助。

我的眼睛里有一些东西

-我不认为这是问题所在,但对于数据绑定,您需要将XML文件包装在
属性中,我想您只是没有将其放在这里,但如果是这样,请修复它

-您需要确保您的菜单项id为FR_LanguageSelection此处与您的目标片段id相同

-您需要使用导航图中声明的操作进行导航,但这里什么都没有


检查这些,如果不是这样,让我知道我眼中有一些东西

-我不认为这是问题所在,但对于数据绑定,您需要将XML文件包装在
属性中,我想您只是没有将其放在这里,但如果是这样,请修复它

-您需要确保您的菜单项id为FR_LanguageSelection此处与您的目标片段id相同

-您需要使用导航图中声明的操作进行导航,但这里什么都没有


检查这些,如果不是这样,请告诉我使用数据绑定时您使用setContentView的方式不同:

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

使用数据绑定时,使用setContentView的方式有所不同:

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

你也可以分享你的nav_graph.xml吗?嗨,ErfanDP。谢谢你的评论。不幸的是,我不允许共享导航图。有什么我需要考虑的吗?你也可以分享你的NavaGrimo.xml吗?嗨,ErfanDP。谢谢你的评论。不幸的是,我不允许共享导航图。有什么我应该考虑的吗?谢谢埃尔凡德的回答和努力。基本上我不理解你们的第一点。如问题中所述,如果没有底部导航的Java代码,所有内容都会正确显示(包括底部导航菜单),但我就是无法导航。关于你的第二点,我刚刚从navGraph复制了id,因此它与navGraph的第三点相同。基本上,我的导航图有20多个条目(因为我使用了20多个不同的片段)。使用Jetpack组件,不带BottomNavigationMenu的导航功能可以正常工作。我需要从20个片段中的每一个链接到目标片段(FR_LanguageSelection)吗BottomNavigationView?@VanessaF对于要生成的数据绑定类,您需要包装希望使用布局属性的数据绑定的整个XML片段和活动。这是我的一个相当不完整的项目,但我使用BottomNav完全实现了数据绑定和NavComComponent。有了这一点,您可能会理解我的观点:查看列表XML文件(例如,我的第一点)并查看在我的单个活动中导航好的,我将所有内容都放在oncreateView方法中,现在我至少没有出现起始null错误,并且可以启动应用程序。但是,导航不起作用。当我点击按钮导航栏上的按钮时,什么也没有发生这是我的onCreateView方法现在“public View onCreateView({at}NonNull LayoutInflater充气机,{at}Nullable ViewGroup container,{at}Nullable Bundle savedInstanceState){binding=ActivityMainBinding.inflate(充气机,容器,false);NavController NavController=Navigation.findNavController(this,R.id.navHostfragment);NavigationUI.setupWithNavController(binding.bottomNavigation,NavController);return binding.getRoot();}“感谢ErfanDP的回答和努力。基本上我不理解你们的第一点。如问题中所述,如果没有底部导航的Java代码,所有内容都会正确显示(包括底部导航菜单),但我就是无法导航。关于你的第二点,我刚刚从navGraph复制了id,因此它与navGraph的第三点相同。基本上,我的导航图有20多个条目(因为我使用了20多个不同的片段)。使用Jetpack组件,不带BottomNavigationMenu的导航功能可以正常工作。我需要从20个片段中的每一个链接到目标片段(FR_LanguageSelection)吗BottomNavigationView?@VanessaF对于要生成的数据绑定类,您需要包装希望使用布局属性的数据绑定的整个XML片段和活动。这是我的一个相当不完整的项目,但我使用BottomNav完全实现了数据绑定和NavComComponent。有了这一点,您可能会理解我的观点:查看列表XML文件(例如,我的第一点)并查看在我的单个活动中导航好的,我将所有内容都放在oncreateView方法中,现在我至少没有出现起始null错误,并且可以启动应用程序。但是,导航不起作用。当我点击按钮导航栏的按钮时,什么都没有发生这是我的onCreateView方法现在“public View onCreateView({at}NonNull LayoutInflater充气机,{at}Nullable ViewGroup container,{at}Nullable Bundle savedInsta