首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何解决在我的Android应用中使用Android导航栏时出现Java空指针异常

如何解决在我的Android应用中使用Android导航栏时出现Java空指针异常
EN

Stack Overflow用户
提问于 2018-03-15 04:00:39
回答 2查看 325关注 0票数 -1

我收到一个运行时错误:

致命异常: main

进程: com.example.home.stobun,PID: 18938

java.lang.RuntimeException:无法启动activity ComponentInfo{com.example.home.stobun/com.example.home.stobun.drawer}:空:尝试对空对象引用调用虚方法的android.app.ActionBar.setDisplayHomeAsUpEnabled(boolean)‘java.lang.NullPointerException

在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2339)

当我尝试实现下面这段代码时:

下面是我的java类:

package com.example.home.stobun;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.NavigationView;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.view.MenuItem;
import android.widget.Toast;


public class drawer extends AppCompatActivity implements 
NavigationView.OnNavigationItemSelectedListener{
private DrawerLayout mdrawerlayout;
private ActionBarDrawerToggle mdrawertoggle;

protected void onCreate (Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.drawer);
    mdrawerlayout=(DrawerLayout)findViewById(R.id.drawer);
    mdrawertoggle=new ActionBarDrawerToggle(this,mdrawerlayout,R.string.open,R.string.close);
    mdrawerlayout.addDrawerListener(mdrawertoggle);
    mdrawertoggle.syncState();
    getActionBar().setDisplayHomeAsUpEnabled(true); ***//geting an error cuz of this***
    NavigationView navigationView=(NavigationView)findViewById(R.id.navigation_view);
    navigationView.setNavigationItemSelectedListener(this);
}

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

@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
    int id=item.getItemId();

    if(id==R.id.home)
    {
        Toast.makeText(this,"This is home",Toast.LENGTH_SHORT);
    }
    if(id==R.id.notices)
    {
        Toast.makeText(this,"This is Notices",Toast.LENGTH_SHORT);
    }
    if(id==R.id.assignments)
    {
        Toast.makeText(this,"This is assignments",Toast.LENGTH_SHORT);
    }

    return false;
}

}

下面是相应的XML

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:theme="@style/Widget.Design.AppBarLayout"
android:id="@+id/drawer"
xmlns:app="http://schemas.android.com/apk/res-auto">
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</LinearLayout>

<android.support.design.widget.NavigationView
    android:id="@+id/navigation_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:menu="@menu/nav_menu"
    android:layout_gravity="start">
     </android.support.design.widget.NavigationView>

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

我已经按照这个YouTube视频中给出的步骤创建了一个应用程序导航抽屉,但是由于出现错误,导航抽屉切换按钮(三行)按钮是不可见的,这是因为对操作栏的调用返回了一个空指针异常。

https://www.youtube.com/watch?v=NC3dM8qcpEM

应用程序在运行时崩溃。

EN

回答 2

Stack Overflow用户

发布于 2018-03-15 04:05:03

您正在调用getActionBar() call getSupportActionBar()

票数 1
EN

Stack Overflow用户

发布于 2018-03-15 04:05:49

您需要使用getSupportActionBar()来代替getActionBar()

就像这样-

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49286704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档