首页 > 解决方案 > 对 addDrawerListener 的空对象引用

问题描述

我正在尝试为我的应用程序创建一个导航抽屉,但由于某种原因,我的应用程序不断崩溃。我研究了其他类似的问题,但解决方案似乎对我没有帮助。

我不确定这是否对它有任何影响,但我正在尝试在已经是片段的页面上做一个导航抽屉(在左侧和右侧)。也许这可能就是问题发生的原因。

这是我尝试运行应用程序时的错误日志:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: dadump.game, PID: 6147
java.lang.RuntimeException: Unable to start activity ComponentInfo{dadump.game/dadump.game.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.widget.DrawerLayout.addDrawerListener(android.support.v4.widget.DrawerLayout$DrawerListener)' on a null object reference
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
    at android.app.ActivityThread.-wrap11(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5417)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.widget.DrawerLayout.addDrawerListener(android.support.v4.widget.DrawerLayout$DrawerListener)' on a null object reference
    at dadump.game.MainActivity.onCreate(MainActivity.java:35)
    at android.app.Activity.performCreate(Activity.java:6237)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
    at android.app.ActivityThread.-wrap11(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5417) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
I/Process: Sending signal. PID: 6147 SIG: 9 Application terminated.

这是我的 MainActivity java 代码

import android.app.Fragment;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.BottomNavigationView;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.MenuItem;
import android.widget.TextView;

import dadump.questions.utils.BottomNavigationViewHelper;

public class MainActivity extends AppCompatActivity implements 
BottomNavigationView.OnNavigationItemSelectedListener {


private DrawerLayout mDrawerLayout;
private ActionBarDrawerToggle mToggle;

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

    BottomNavigationView navigation =findViewById(R.id.navigation);
    navigation.setOnNavigationItemSelectedListener(this);

    setupBottomNavigationView();
    loadFragment(new HomeFragment());

    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_home);
    mToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.open, R.string.close);
    mDrawerLayout.addDrawerListener(mToggle);
    mToggle.syncState();
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}

private void setupBottomNavigationView(){
    BottomNavigationViewEx bottomNavigationViewEx = (BottomNavigationViewEx)findViewById(R.id.navigation);
    BottomNavigationViewHelper.setupBottomNavigationView(bottomNavigationViewEx);
}

private boolean loadFragment(android.support.v4.app.Fragment fragment) {

    if(fragment != null){

        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment).commit();

        return true;
    }
    return false;
}

@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {

    android.support.v4.app.Fragment fragment = null;

    switch(item.getItemId()){
        case R.id.ic_home:
            fragment = new HomeFragment();
            break;
        case R.id.ic_directMessage:
            fragment = new DirectMessageFragment();
            break;
        case R.id.ic_newQuestion:
            fragment = new NewQuestionFragment();
            break;
        case R.id.ic_notifications:
            fragment = new NotificationsFragment();
            break;
        case R.id.ic_userProfile:
            fragment = new UserProfileFragment();
            break;
    }

    return loadFragment(fragment);
}
}

这是我的 XML 代码:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/drawer_home"
tools:context=".MainActivity">



<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="56dp"
        android:layout_alignParentTop="true"
        android:id="@+id/top_bar">

        <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">



            <android.support.v7.widget.Toolbar
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@color/darkGrey">



            </android.support.v7.widget.Toolbar>

        </android.support.design.widget.AppBarLayout>

    </RelativeLayout>

    <android.support.design.widget.TabLayout
        app:tabIndicatorHeight="0dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/tabLayout"
        android:background="@color/lightGrey"
        app:tabTextColor="@color/white"
        app:tabMode="scrollable"
        android:elevation="7.5dp"
        android:layout_below="@id/top_bar">

        <android.support.design.widget.TabItem
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Top" />


        <android.support.design.widget.TabItem
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Close" />

        <android.support.design.widget.TabItem
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="New" />

        <android.support.design.widget.TabItem
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Friends" />

        <android.support.design.widget.TabItem
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Following" />
    </android.support.design.widget.TabLayout>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Home"
        android:layout_centerInParent="true"
        android:textSize="45dp"/>

    <android.support.design.widget.NavigationView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:menu="@menu/activity_main_drawer_left"
        android:layout_gravity="start">

    </android.support.design.widget.NavigationView>

</RelativeLayout>

标签: androidandroid-fragmentsnullpointerexceptionnavigation-drawer

解决方案


推荐阅读