错误[空对象引用上的android.support.v7.app.ActionBar.setDisplayHomeAsUpEnabled(boolean)']

时间:2018-11-16 09:24:32

标签: android nullpointerexception android-drawer

我正在尝试在应用程序中添加一个导航抽屉,但是当我尝试显示以下错误时,如果我已注释“ getSupportActionBar()。setDisplayHomeAsUpEnabled(true);”,此行,则不会显示任何错误。

android.support.v7.app.ActionBar.setDisplayHomeAsUpEnabled(boolean)' on a null object reference

这是我的Java代码

import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MenuItem;

public class drawer extends AppCompatActivity {
private DrawerLayout mDrawer;
private ActionBarDrawerToggle mToggle;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_drawer);
        mDrawer = (DrawerLayout) findViewById(R.id.drawer);
        mToggle = new ActionBarDrawerToggle(this,mDrawer,R.string.Open,R.string.Close);
        mDrawer.addDrawerListener(mToggle);
        mToggle.syncState();
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (mToggle.onOptionsItemSelected(item))
        {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }


}

这是我的activity_drawer.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.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:id="@+id/drawer"
    tools:context=".drawer">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"></LinearLayout>

    <android.support.design.widget.NavigationView
        app:headerLayout="@layout/header_drawer"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:background="@color/colorPrimary"
        app:itemTextColor="@color/grey"
        app:itemIconTint="@color/grey"
        app:menu="@menu/menudrawer"
        android:layout_gravity="start">

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

</android.support.v4.widget.DrawerLayout>

4 个答案:

答案 0 :(得分:0)

我认为您在xml中缺少工具栏。而且您也缺少在代码中设置工具栏的方法。

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

<android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?android:attr/actionBarSize"
        android:background="@color/colorPrimary"
        android:minHeight="?android:attr/actionBarSize"
        android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
        local:popupTheme="@style/ThemeOverlay.AppCompat.Light"
        local:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        local:title="@string/dashboard" />

答案 1 :(得分:0)

尝试此代码。 在style.xml中添加样式

    <style name="NoActionBar" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:windowActionBar">false</item>
    <item name="android:windowNoTitle">true</item>
</style>

将android清单传递给活动。

        <activity android:name=".MainActivity"
        android:theme="@style/NoActionBar">

答案 2 :(得分:0)

请添加

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?android:attr/actionBarSize"
    android:background="@color/colorPrimary"
    android:minHeight="?android:attr/actionBarSize"
    android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
    app:title="@string/dashboard" />

代替

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"></LinearLayout>

并将其添加到您的活动中

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

if (getSupportActionBar()!=null){
   setSupportActionBar(toolbar);
 }

另外,将它们添加到您的主题

 <style name=" Your Style">
   <item name="android:windowActionBar">false</item>
   <item name="android:windowNoTitle">true</item>
 </style>

答案 3 :(得分:0)

在您的styles.xml中使用

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> </style>

或在活动中的布局 setSupportActionBar 中提供工具栏(如果您想使用)

Theme.AppCompat.Light.NoActionBar