java - 使用 NavigationView 时出错/应用程序崩溃
问题描述
我在我的应用程序上使用了 NavigationView,现在每次我尝试打开它时它都会崩溃。我搜索了很多与此类似的问题,但任何解决方案都适合我。我不知道如何解决它...我使用Android Studio的最新版本,compileVersion是SDK 30。这是错误:
FATAL EXCEPTION: main
Process: gladoop.javir3tics.test, PID: 18778
java.lang.RuntimeException: Unable to start activity ComponentInfo{gladoop.javir3tics.test/gladoop.javir3tics.test.MainActivity}: android.view.InflateException: Binary XML file line #67: Binary XML file line #67: Error inflating class com.google.android.material.navigation.NavigationView
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2946)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3081)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1831)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:201)
at android.app.ActivityThread.main(ActivityThread.java:6810)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
Caused by: android.view.InflateException: Binary XML file line #67: Binary XML file line #67: Error inflating class com.google.android.material.navigation.NavigationView
Caused by: android.view.InflateException: Binary XML file line #67: Error inflating class com.google.android.material.navigation.NavigationView
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
at android.view.LayoutInflater.createView(LayoutInflater.java:651)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:794)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:734)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:867)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:828)
at android.view.LayoutInflater.inflate(LayoutInflater.java:519)
at android.view.LayoutInflater.inflate(LayoutInflater.java:427)
at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:696)
at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:170)
at gladoop.javir3tics.test.MainActivity.onCreate(MainActivity.java:38)
at android.app.Activity.performCreate(Activity.java:7224)
at android.app.Activity.performCreate(Activity.java:7213)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1272)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2926)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3081)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1831)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:201)
at android.app.ActivityThread.main(ActivityThread.java:6810)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
Caused by: android.view.InflateException: Couldn't resolve menu item onClick handler AbrirInicio in class gladoop.javir3tics.test.MainActivity
at androidx.appcompat.view.SupportMenuInflater$InflatedOnMenuItemClickListener.<init>(SupportMenuInflater.java:255)
at androidx.appcompat.view.SupportMenuInflater$MenuState.setItem(SupportMenuInflater.java:484)
2020-10-17 20:03:20.942 18778-18778/gladoop.javir3tics.test E/AndroidRuntime: at androidx.appcompat.view.SupportMenuInflater$MenuState.addItem(SupportMenuInflater.java:531)
at androidx.appcompat.view.SupportMenuInflater.parseMenu(SupportMenuInflater.java:207)
at androidx.appcompat.view.SupportMenuInflater.inflate(SupportMenuInflater.java:129)
at com.google.android.material.navigation.NavigationView.inflateMenu(NavigationView.java:367)
at com.google.android.material.navigation.NavigationView.<init>(NavigationView.java:235)
at com.google.android.material.navigation.NavigationView.<init>(NavigationView.java:122)
... 28 more
Caused by: java.lang.NoSuchMethodException: AbrirInicio [interface android.view.MenuItem]
at java.lang.Class.getMethod(Class.java:2068)
at java.lang.Class.getMethod(Class.java:1690)
at androidx.appcompat.view.SupportMenuInflater$InflatedOnMenuItemClickListener.<init>(SupportMenuInflater.java:251)
... 35 more
我的 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:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/fondo_vertical"
tools:context=".MainActivity"
tools:ignore="ExtraText">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/imageView"
android:layout_width="418dp"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
android:visibility="invisible"
android:src="@drawable/fondo"
tools:layout_editor_absoluteY="49dp" />
<RelativeLayout
android:layout_width="412dp"
android:layout_height="679dp"
android:layout_marginTop="58dp"
tools:layout_editor_absoluteX="-1dp"
tools:layout_editor_absoluteY="52dp">
<WebView
android:id="@+id/novedades"
android:layout_width="match_parent"
android:layout_height="200dp"
android:scrollbars="none"
android:touchscreenBlocksFocus="true"/>
<ImageView
android:id="@+id/youtube"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_below="@id/novedades"
android:clickable="true"
android:onClick="AbrirYouTube"
android:src="@drawable/youtube" />
<ImageView
android:layout_width="match_parent"
android:layout_height="200dp"
android:src="@drawable/twitch"
android:layout_below="@id/youtube"
android:id="@+id/twitch"
android:onClick="AbrirTwitch"/>
</RelativeLayout>
<include
android:id="@+id/include"
layout="@layout/custom_appbar" />
</RelativeLayout>
<com.google.android.material.navigation.NavigationView
android:id="@+id/menu_iconos"
android:background="@color/menu_lateral_fondo"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/header_menu"
app:itemIconPadding="15dp"
app:menu="@menu/drawermenu">
</com.google.android.material.navigation.NavigationView>
</androidx.drawerlayout.widget.DrawerLayout>
还有我的 MainActivity:
package gladoop.javir3tics.test;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.view.Gravity;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.Toast;
import com.google.android.material.navigation.NavigationView;
import com.onesignal.OneSignal;
public class MainActivity extends AppCompatActivity {
boolean doubleBackToExitPressedOnce = false;
NavigationView menu;
WebView mWebview;
DrawerLayout drawerLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
menu = (NavigationView) findViewById(R.id.menu_iconos);
menu.setItemIconTintList(null);
//WEB INICIO NOVEDADES
mWebview = findViewById(R.id.novedades);
WebSettings conf = mWebview.getSettings();
conf.setJavaScriptEnabled(true);
mWebview.setBackgroundColor(Color.TRANSPARENT);
mWebview.setVisibility(View.GONE);
mWebview.loadUrl("https://gladoop.javiretics.me/novedades_inicio.html");
mWebview.setWebViewClient(new WebViewClient(){
public void onPageFinished(WebView view, String url) {
mWebview.setVisibility(View.VISIBLE);
}
});
mWebview.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return true;
}
});
// ONESIGNAL
// Logging set to help debug issues, remove before releasing your app.
OneSignal.setLogLevel(OneSignal.LOG_LEVEL.VERBOSE, OneSignal.LOG_LEVEL.NONE);
// OneSignal Initialization
OneSignal.startInit(this)
.inFocusDisplaying(OneSignal.OSInFocusDisplayOption.Notification)
.unsubscribeWhenNotificationsAreDisabled(true)
.init();
}
// ABRIR DISTINTAS ACTIVIDADES
public void AbrirInicio(View view) {
Intent intent = new Intent(this, MainActivity.class);
finish();
startActivity(intent);
}
public void AbrirYouTube(View view) {
Intent intent = new Intent(this, YouTubeRSS_APP.class);
finish();
startActivity(intent);
}
public void AbrirInstagram(View view) {
Intent intent = new Intent(this, Instagram.class);
finish();
startActivity(intent);
}
public void AbrirTwitter(View view) {
Intent intent = new Intent(this, Twitter.class);
finish();
startActivity(intent);
}
public void AbrirTwitch(View view) {
Intent intent = new Intent(this, Twitch.class);
finish();
startActivity(intent);
}
public void AbrirTikTok(View view) {
Intent intent = new Intent(this, TikTok.class);
finish();
startActivity(intent);
}
@Override
public void onBackPressed() {
if (doubleBackToExitPressedOnce) {
super.onBackPressed();
onDestroy();
System.exit(0);
}
this.doubleBackToExitPressedOnce = true;
Toast.makeText(this, "Pulsa otra vez para salir", Toast.LENGTH_SHORT).show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
doubleBackToExitPressedOnce=false;
}
}, 2000);
}
//Abrir Menu Lateral
public void ToastMenu(View view){
Toast.makeText(this, "Desliza desde la izquierda para abrir el menú ", Toast.LENGTH_LONG).show();
}
}
谢谢!
解决方案
推荐阅读
- c++ - 将参数传递给模板构造函数
- sql-server - 在 Azure 上创建弹性作业代理后,导出失败
- system-verilog - 导入包之间的systemverilog名称冲突
- python - WXPython,从左到右面板传递变量
- r - 当重复使用同一个类时,如何使用 R 抓取数据?
- sql - SQL SELECT 单行,每个 ID 由 updated_at 列排序
- javascript - 创建一个只返回奇数的函数
- angular - 我将如何使用在 Angular 的后期阶段确定其值的变量?
- python - Can't delete and reinstall Python 3 because of new user folder name
- assembly - 在 Z80 CP/M 上等待一段时间