Android: невозможно установить onCreateOptionsMenu и onOptionsItemSelected в общем классе для NavigationView - PullRequest
0 голосов
/ 15 января 2019

У меня есть NavigationView, чтобы поместить ящик в действие, и я хочу использовать его в нескольких действиях

Активность:

public class MainActivity extends MenuOptions {

  private DemoFragmentCollectionAdapter adapter;
  private DrawerLayout drawerLayout;
  private NavigationView navigationView;
  private Toolbar toolbar;

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

    toolbar = findViewById(R.id.primaryToolbar);
    setSupportActionBar(toolbar);
    final ActionBar actionBar = getSupportActionBar();
    actionBar.setDisplayHomeAsUpEnabled(true);
    actionBar.setHomeAsUpIndicator(R.drawable.menu);

    drawerLayout = findViewById(R.id.drawer_layout);
    navigationView = findViewById(R.id.navigation_view);

    navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
            int id = menuItem.getItemId();
            switch (id){
                case R.id.cameraIcon:
                    menuItem.setChecked(true);
                    Toast.makeText(MainActivity.this, "Camera", Toast.LENGTH_LONG).show();
                    drawerLayout.closeDrawers();
                    return true;
            }
            return false;
        }
    });
  }
}

Класс MenuOptions:

public class MenuOptions extends AppCompatActivity {
private DrawerLayout drawerLayout;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main_activity_menu, menu);
    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    switch (id){
        case R.id.settingsIcon:
            drawerLayout.openDrawer(GravityCompat.START);
            Toast.makeText(getApplicationContext(), "Settings", Toast.LENGTH_LONG).show();
            return true;

        case android.R.id.home:
            drawerLayout.openDrawer(GravityCompat.START);
            Toast.makeText(getApplicationContext(), "Home icon", Toast.LENGTH_LONG).show();
            return true;

            default:return super.onOptionsItemSelected(item);
    }

  }
}

Но когда я пытаюсь нажать кнопку «Домой» (которая преобразуется в значок меню в ящике), приложение вылетает, и я получаю эту ошибку

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

Как решить эту проблему?

...