9

How do we share Drawer with all the activities?

In the lister: onNavigationItemSelected of setNavigationItemSelectedListener we can get the id and navigate to it. What I am looking for is something like this:

private void initDrawerLayout() {
    drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

        NavigationView navView = (NavigationView) findViewById(R.id.navigation_view);
        navView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(MenuItem menuItem) {


        Intent intent;
        int id = menuItem.getItemId();

        switch(id) {

            case R.id.home:
            case R.id.drawer_home:
            // call activity instead of adding/replacing fragment
            return true;

            case R.id.drawer_gallery:
            // call activity instead of adding/replacing fragment
            intent = new Intent(MainActivity.this, GalleryActivity.class);
            startActivity(intent);
            return true;

            case R.id.drawer_about:
            // call activity instead of adding/replacing fragment
            intent = new Intent(MainActivity.this, AboutActivity.class);
            startActivity(intent);
            return true;
        ...
        }
        ...

I know I can make all the menuItems add/replace Fragment, but then handling fragments and memory management is a big pain.

Instead I want each menuItem select/click to invoke Activity. i.e. each MainMenuItem to have Activity and those will hold fragments with complex layouts.

All I want to do is have each main menu item be an Activity instead of a Fragment.

And all these activities can share same DrawerNavigation.

Is this the recommended way? Or do we always add Fragments for NavigationDrawer item clicks??

Should I add NavigationView to BaseActivity and then extend all activities from there??

Following this new guide about Support Design lib

Community
  • 1
  • 1
Rinav
  • 2,527
  • 8
  • 33
  • 55
  • 1
    yes, you should "add NavigationView to BaseActivity and then extend all activities from there" – pskink Jun 13 '15 at 18:59

2 Answers2

2

I found the answer using this SO answer

Extending is the right way. Just override setContentView in the right way...

Community
  • 1
  • 1
Rinav
  • 2,527
  • 8
  • 33
  • 55
0

I am a bit confused here as well. After finding very little information on this I tried to extend my subclass

public class NewActivity extends MainActivity{
     ...
}

However, this alone didn't do anything. the MainActivity has a fully functioning NavigationView that will navigate to each activity..Only thing that is left is sharing it with each activity.

Gabriele Mariotti
  • 320,139
  • 94
  • 887
  • 841
JGray
  • 293
  • 2
  • 15
  • I too added the Navigating code in BaseActivity, but then something feels wrong. As each activity that extends BaseActivity, will have redundant code and each Activity will be processing this information. I might be wrong on this but is this the only way out? – Rinav Jun 26 '15 at 18:59
  • Parent activity should implement `NavigationView.OnNavigationItemSelectedListener` interface, so that child activities will be inheriting the menu navigation functionality of `public boolean onNavigationItemSelected(MenuItem item)` method. – Mussa Jan 11 '16 at 17:51