【问题标题】:Android BottomNavigationView App Crashes, Android Studio - Java [duplicate]Android BottomNavigationView 应用程序崩溃,Android Studio - Java [重复]
【发布时间】:2019-08-07 20:05:02
【问题描述】:

我正在制作一个涉及网络抓取、片段、导航视图和底部导航视图的应用程序。在我添加底部导航视图之前,它运行顺利。在连接 USB 的情况下运行它时,它会构建所有文件,但在启动主要活动后会崩溃。我在 logcat 上收到一波又一波的错误。

我用谷歌搜索了一些错误消息,但我找不到任何关于它们的已回答问题。

MainActivity.java

package com.example.moneysaver;

import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;

import android.os.Bundle;
import android.view.MenuItem;
import android.widget.Toast;

import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.google.android.material.navigation.NavigationView;

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {

    private DrawerLayout drawer;

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

        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        drawer = findViewById(R.id.drawer_layout);

        NavigationView navigationView = findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);

        BottomNavigationView bottomNavigationView = findViewById(R.id.bottom_nav_view);

        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar,
                R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.addDrawerListener(toggle);
        toggle.syncState();

        if (savedInstanceState == null) {

        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                new SearchFragment()).commit();
        navigationView.setCheckedItem(R.id.nav_search);
        }


        bottomNavigationView.setOnNavigationItemSelectedListener
                (new BottomNavigationView.OnNavigationItemSelectedListener() {
                    @Override
                    public boolean onNavigationItemSelected(@NonNull MenuItem item) {

                        switch (item.getItemId()){
                            case R.id.nav_search:
                                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                                        new SearchFragment()).commit();
                                break;

                            case R.id.nav_saved_items:
                                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                                        new SavedItemsFragment()).commit();
                                break;
                        }

                        return true;

                    }
                });


    }

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
        switch (menuItem.getItemId()){

            case R.id.nav_settings:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                        new SettingsFragment()).commit();
                break;

            case R.id.nav_search:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                        new SearchFragment()).commit();
                break;

            case R.id.nav_saved_items:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                        new SavedItemsFragment()).commit();
                break;

            case R.id.nav_open:
                Toast.makeText(this, "Open Message", Toast.LENGTH_SHORT).show();
                break;
        }

        drawer.closeDrawer(GravityCompat.START);

        return true;
    }

    @Override
    public void onBackPressed() {

        if (drawer.isDrawerOpen(GravityCompat.START)){
            drawer.closeDrawer(GravityCompat.START);
        }else {

            super.onBackPressed();
        }
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout 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/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context=".MainActivity"
    tools:openDrawer="start">


    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <FrameLayout
            android:id="@+id/fragment_container2"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_above="@+id/bottom_nav_view"
            android:layout_alignParentTop="true"
            />

        <android.support.design.widget.BottomNavigationView
            android:id="@+id/bottom_nav_view"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:layout_alignParentBottom="true"
            android:background="@color/colorPrimary"
            app:menu="@menu/bottom_drawer_menu"
            />

    </RelativeLayout>


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="@color/design_default_color_primary"
            android:elevation="4dp"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

        <FrameLayout
            android:id="@+id/fragment_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            />

    </LinearLayout>


    <com.google.android.material.navigation.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:headerLayout="@layout/nav_header"
        app:menu="@menu/drawer_menu" />

</androidx.drawerlayout.widget.DrawerLayout>

这是最大的 Logcat 错误消息

2019-08-07 21:56:09.161 31782-31782/? E/Android运行时:致命 例外:主要 进程:com.example.moneysaver,PID:31782 java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.moneysaver/com.example.moneysaver.MainActivity}: android.view.InflateException:二进制 XML 文件第 26 行:二进制 XML 文件第 26 行:膨胀类错误 android.support.design.widget.BottomNavigationView 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2793) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2864) 在 android.app.ActivityThread.-wrap12(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1567) 在 android.os.Handler.dispatchMessage(Handler.java:105) 在 android.os.Looper.loop(Looper.java:156) 在 android.app.ActivityThread.main(ActivityThread.java:6523) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:941) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:831) 引起:android.view.InflateException:二进制 XML 文件第 26 行:二进制 XML 文件第 26 行:错误膨胀类 android.support.design.widget.BottomNavigationView 引起:android.view.InflateException:二进制 XML 文件第 26 行:错误膨胀类 android.support.design.widget.BottomNavigationView 引起:java.lang.ClassNotFoundException:在路径上找不到类“android.support.design.widget.BottomNavigationView”: DexPathList[[zip 文件“/data/app/com.example.moneysaver-2/base.apk”, 压缩文件 "/data/app/com.example.moneysaver-2/split_lib_dependencies_apk.apk", 压缩文件 “/data/app/com.example.moneysaver-2/split_lib_slice_0_apk.apk”,压缩包 文件“/data/app/com.example.moneysaver-2/split_lib_slice_1_apk.apk”, 压缩文件 “/data/app/com.example.moneysaver-2/split_lib_slice_2_apk.apk”,压缩包 文件“/data/app/com.example.moneysaver-2/split_lib_slice_3_apk.apk”, 压缩文件 “/data/app/com.example.moneysaver-2/split_lib_slice_4_apk.apk”,压缩包 文件“/data/app/com.example.moneysaver-2/split_lib_slice_5_apk.apk”, 压缩文件 “/data/app/com.example.moneysaver-2/split_lib_slice_6_apk.apk”,压缩包 文件“/data/app/com.example.moneysaver-2/split_lib_slice_7_apk.apk”, 压缩文件 “/data/app/com.example.moneysaver-2/split_lib_slice_8_apk.apk”,压缩包 文件 "/data/app/com.example.moneysaver-2/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.example.moneysaver-2/lib/arm64, /system/lib64、/vendor/lib64、/system/vendor/lib64、/product/lib64]] 在 dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:380) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:312) 在 android.view.LayoutInflater.createView(LayoutInflater.java:616) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:798) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:738) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:869) 在 android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:832) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:872) 在 android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:832) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:518) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:426) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:377) 在 androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:469) 在 androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:140) 在 com.example.moneysaver.MainActivity.onCreate(MainActivity.java:24) 在 android.app.Activity.performCreate(Activity.java:6910) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2746) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2864) 在 android.app.ActivityThread.-wrap12(ActivityThread.java) 2019-08-07 21:56:09.161 31782-31782/? E/Android运行时:在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1567) 在 android.os.Handler.dispatchMessage(Handler.java:105) 在 android.os.Looper.loop(Looper.java:156) 在 android.app.ActivityThread.main(ActivityThread.java:6523) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:941) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:831)

build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.0"
    defaultConfig {
        applicationId "com.example.moneysaver"
        minSdkVersion 16
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.2.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
    implementation 'org.jsoup:jsoup:1.12.1'
    implementation 'com.android.support:appcompat-v7:29.0.0'
    implementation 'com.android.support:design:29.0.0'
}

【问题讨论】:

    标签: java android-studio crash bottomnavigationview


    【解决方案1】:

    android.view.InflateException: Binary XML file line #26: Error inflating class android.support.design.widget.BottomNavigationView 原因:java.lang.ClassNotFoundException: 找不到类“android.support.design.widget .BottomNavigationView" 在路径上:

    ^ 这是需要注意的错误部分,它很可能是由某种构建问题引起的。尝试的第一件事是始终运行干净的构建并确保完全卸载该应用程序。如果这没有帮助,请务必检查您是否在 build.gradle 中添加了正确的支持库版本:

    dependencies {
        //...
        implementation 'com.android.support:design:<version here>'
        //...
    }
    

    祝你好运!

    【讨论】:

    • 感谢您指出问题,但我很确定我不能再使用 compile 了。我添加了带有实现的 android.support:design 库,并将 29.0.0 作为版本。这可能是原因吗?怎样才能得到真正版的库?
    • 如果可能的话,请告诉我你的 build.gradle,现在实现是正确的,我很抱歉。
    • 当然,我将它添加到问题的底部,因为我无法在一条评论中发布全部内容,而且它也会奇怪地显示它
    【解决方案2】:

    重构项目解决了这个问题,因为 android.support 库似乎已经过时,整个项目需要迁移到 androidx重构 --> 迁移到 Androidx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-16
      • 1970-01-01
      相关资源
      最近更新 更多