【发布时间】: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