android - bottomNavigationView = findViewById(R.id.navigation);返回 null java

我真的不知道为什么会这样。我对 android 开发非常陌生,如果这是一个非常愚蠢的问题,我很抱歉。在使用方法“findViewById()”之后,基本上bottomNavigationView就是null。我知道它是 null 因为我已经把它打印出来了。我搜索了其他帖子,得出的结论是它要么是方法序列,要么是 xml 文件。但我似乎找不到他们的任何问题。

2022-05-18 17:05:02.236 6836-6836/com.example.smartchatters W/e.smartchatter: Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (greylist, reflection, allowed)
2022-05-18 17:05:02.521 6836-6836/com.example.smartchatters I/System.out: bottomNavigationView ->null
2022-05-18 17:05:02.579 6836-6858/com.example.smartchatters D/HostConnection: HostConnection::get() New Host Connection established 0xf0751650, tid 6858

这是 MainActivity.java 中唯一的方法:

import androidx.appcompat.app.AppCompatActivity;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        BottomNavigationView bottomNavigationView = findViewById(R.id.navigation);
        System.out.println("bottomNavigationView ->"+bottomNavigationView);

    }
}

导航.xml 文件:

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

    <fragment
        android:id="@+id/mainFragment"
        android:name="com.example.smartchatters.MainFragment"
        android:label="fragment_main"
        tools:layout="@layout/fragment_main" />
    <fragment
        android:id="@+id/contactsFragment"
        android:name="com.example.smartchatters.ContactsFragment"
        android:label="fragment_contacts"
        tools:layout="@layout/fragment_contacts" />
</navigation>

和 gradle.build:

plugins {
    id 'com.android.application'
}

android {
    compileSdk 32

    defaultConfig {
        applicationId "com.example.smartchatters"
        minSdk 21
        targetSdk 32
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {

    implementation 'androidx.appcompat:appcompat:1.4.1'
    implementation 'com.google.android.material:material:1.6.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
    implementation 'androidx.navigation:navigation-fragment:2.4.2'
    implementation 'androidx.navigation:navigation-ui:2.4.2'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}

回答1

您正在设置为布局 activity_main.xml

setContentView(R.layout.activity_main);

然后方法

findViewById 将在 activity_main.xml 文件中搜索视图 ID。

因此,您需要使用 activity_main.xml 中的视图 ID(用于 BottomNavigationView

如果您在activity_main.xml 中没有ID 为“navigation”的视图,该方法将返回null