android studio NullPointerException at addDrawerListener 方法

我正在尝试构建一个包含少量项目的导航抽屉。但它让我在下面的代码中的 addDrawerListener 方法出错:

public class Mainactivity extends AppCompatactivity {
    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);
        actionbardrawertoggle toggle = new actionbardrawertoggle(this,drawer,toolbar,R.string.navigation_drawer_open,R.string.navigation_drawer_close);
        drawer.addDrawerListener(toggle);
        toggle.syncState();
    }

    @Override
    public void onBackpressed() {
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else{
            super.onBackpressed();
        }
    }
}

这里是 AndroidManifest.xml :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapplication">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsrtl="true"
        android:theme="@style/Theme.MyApplication">
        <activity android:name=".Mainactivity"
            android:theme="@style/Theme.MyApplication.NoactionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

这是菜单 ( drawer_menu.xml ),它似乎工作正常

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:showIn = "navigation_view">

    <group android:checkableBehavior="single">

        <item android:id="@+id/nav_people"
            android:icon="@drawable/ic_people"
            android:title="@string/people" />
        <item android:id="@+id/nav_goods"
            android:icon="@drawable/ic_goods"
            android:title="@string/goods" />
        <item android:id="@+id/nav_delivery"
            android:icon="@drawable/ic_delivery"
            android:title="@string/delivery" />
        <item android:id="@+id/nav_saloon"
            android:icon="@drawable/ic_saloon"
            android:title="@string/saloon" />
        <item android:id="@+id/nav_setting"
            android:icon="@drawable/ic_setting"
            android:title="@string/setting" />
        <item android:id="@+id/nav_help"
            android:icon="@drawable/ic_help"
            android:title="@string/help" />
        <item android:id="@+id/nav_update"
            android:icon="@drawable/ic_update"
            android:title="@string/update" />
        <item android:id="@+id/nav_about_us"
            android:icon="@drawable/ic_about_us"
            android:title="@string/about_us" />
        <item android:id="@+id/nav_quit"
            android:icon="@drawable/ic_exit"
            android:title="@string/exit" />

    </group>
</menu>

还有一个标题( nav_header.xml ),其中包含一张小图片和两个文本视图

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/nav_header"
    android:gravity="bottom"
    android:orientation="vertical"
    android:padding="16dp"
    android:theme="@style/ThemeOverlay.AppCompat.Dark">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/ic_launcher_round" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingTop="8dp"
        android:text="@string/strong_text"
        android:textAppearance="@style/TextAppearance.AppCompat.Body1" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/weak_text" />

</LinearLayout>

这里是 themes.xml 文件。我试图遵循的教程有点过时,并且有styles.xml 文件而不是themes.xml 但我不确定。我复制粘贴 <style name="Theme.MyApplication.NoactionBar">

中的 themes.xml (night) 部分
<resources xmlns:tools="http://schemas.android.com/tools">
    <!-- Base application theme. -->
    <style name="Theme.MyApplication" parent="Theme.MaterialComponents.DayNight.DarkactionBar">
        <!-- Primary brand color. -->
        <item name="colorPrimary">@color/purple_500</item>
        <item name="colorPrimaryVariant">@color/purple_700</item>
        <item name="colorOnPrimary">@color/white</item>
        <!-- Secondary brand color. -->
        <item name="colorSecondary">@color/teal_200</item>
        <item name="colorSecondaryVariant">@color/teal_700</item>
        <item name="colorOnSecondary">@color/black</item>
        <!-- Status bar color. -->
        <item name="android:statusBarColor" tools:targetapi="l">?attr/colorPrimaryVariant</item>
        <!-- Customize your theme here. -->
    </style>

    <style name="Theme.MyApplication.NoactionBar">
        <item name="windowactionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="android:statusBarColor">@android:color/transparent</item>
    </style>

</resources>
sunlei890325sunlei 回答:android studio NullPointerException at addDrawerListener 方法

drawer 使用前需要初始化。

drawer = findViewById(R.id.drawer) 

(注意:在 param 中,您需要像 Toolbar 一样从 xml 传递 DrawerLayout 的 id)。

这应该在你使用 drawer 之前,在你的案例下面的行之前。

ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this,drawer,toolbar,R.string.navigation_drawer_open,R.string.navigation_drawer_close);
,

您必须像使用工具栏一样绑定 drawerLayout id。

在使用“抽屉”对象之前,只需在 XML 中绑定抽屉的 id。

,

在查找工具栏 id 下添加以下行 -

int
本文链接:https://www.f2er.com/4894.html

大家都在问