findViewById для box_layout всегда возвращает ноль - PullRequest
0 голосов
/ 16 февраля 2019

Я пытаюсь реализовать ящик навигации, но findViewById(R.id.drawer_layout) всегда возвращает null

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        toolbar = findViewById(R.id.customToolbar);
        toolbar.setTitle("Title");
        setSupportActionBar(toolbar);
        createDrawerNavigation();
}

private void createDrawerNavigation() {
        drawerLayout = findViewById(R.id.drawer_layout);
        Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_menu);
    }

@Override
    public boolean onOptionsItemSelected(MenuItem menuItem) {
        if(menuItem.getItemId() == android.R.id.home) {
            Log.v("","DDDDDDDDDDDD");
            drawerLayout.openDrawer(GravityCompat.START);
            return true;
        }
        else
            return super.onOptionsItemSelected(menuItem);
    }

app_drawer.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- Use DrawerLayout as root container for activity -->
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <!-- Layout to contain contents of main body of screen (drawer will slide over this) -->
    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <!-- Container for contents of drawer - use NavigationView to make configuration easier -->
    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:menu="@menu/drawer_menu"
        app:headerLayout="@layout/drawer_header"
        android:fitsSystemWindows="true" />

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

, когда я нажимаю на кнопку меню, приложение вылетает с этимошибка-

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.widget.DrawerLayout.openDrawer(int)' on a null object reference```

1 Ответ

0 голосов
/ 16 февраля 2019

Вы назвали свой файл макета app_drawer.xml, но в своей деятельности вы вызываете setContentView(R.layout.activity_main).

Либо измените имя файла макета на activity_main.xml, либо измените строку в своем коде Java на setContentView(R.layout.app_drawer);

...