Navigation Drawer to switch activities instead of fragments

前端 未结 4 1830
庸人自扰
庸人自扰 2020-11-29 15:34

Is it possible to use a navigation drawer in android but instead of updating fragments, i would like to switch between activities as my means of navigation within the app.

4条回答
  •  失恋的感觉
    2020-11-29 16:28

    You need a BaseDrawerActivity which implement the Navigation Drawer then extend the BaseDrawerActivity in each activity you need Navigation Drawer.

    First create BaseDrawerActivity.java :

    public class BaseDrawerActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener{
    
        DrawerLayout drawerLayout;
        Toolbar toolbar;
        FrameLayout frameLayout;
        NavigationView navigationView;
    
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            super.setContentView(R.layout.activity_base_drawer);;
    
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);
    
            frameLayout = (FrameLayout) findViewById(R.id.content_frame);
    
            drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
            ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, drawerLayout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
            drawerLayout.setDrawerListener(toggle);
            toggle.syncState();
    
            navigationView = (NavigationView) findViewById(R.id.nav_view);
            navigationView.setNavigationItemSelectedListener(this);
        }
    
        @Override
        public void onBackPressed() {
            if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
                drawerLayout.closeDrawer(GravityCompat.START);
            } else {
                super.onBackPressed();
            }
        }
    
        @Override
        public boolean onNavigationItemSelected(MenuItem item) {
            int id = item.getItemId();
    
            //to prevent current item select over and over
            if (item.isChecked()){
                drawerLayout.closeDrawer(GravityCompat.START);
                return false;
            }
    
            if (id == R.id.nav_camera) {
                // Handle the camera action
                startActivity(new Intent(getApplicationContext(), CameraActivity.class));
            } else if (id == R.id.nav_gallery) {
                startActivity(new Intent(getApplicationContext(), GalleryActivity.class));
            } else if (id == R.id.nav_slideshow) {
                startActivity(new Intent(getApplicationContext(), SlideshowActivity.class));
            } else if (id == R.id.nav_manage) {
                startActivity(new Intent(getApplicationContext(), ManageActivity.class));
            } else if (id == R.id.nav_share) {
                startActivity(new Intent(getApplicationContext(), ShareActivity.class));
            } else if (id == R.id.nav_send) {
                startActivity(new Intent(getApplicationContext(), SendActivity.class));
            }
            drawerLayout.closeDrawer(GravityCompat.START);
            return true;
        }
    }
    

    then create activity_base_drawer.xml in res/layout folder:

    
    
    
        
    
        
    
    
    

    where @layout/app_bar_home is:

    
    
    
        
    
            
    
        
    
        
    
    
    

    Next you enter your Activities that will have Navigation Drawer such as CameraActivity.java :

    public class CameraActivity extends BaseDrawerActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            getLayoutInflater().inflate(R.layout.activity_camera, frameLayout);
    
            /**
            * Setting title
            */
            setTitle("Camera");
    
        }
    
        @Override
        protected void onResume() {
            super.onResume();
            // to check current activity in the navigation drawer
            navigationView.getMenu().getItem(0).setChecked(true);
        }
    }
    

    Where R.layout.activity_camera is your layout for CameraActivity.java.

    Then create other Activity like GalleryActivity.java and so on that will have Navigation Drawer:

    public class GalleryActivity extends BaseDrawerActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            getLayoutInflater().inflate(R.layout.activity_gallery, frameLayout);
    
            // Setting title
            setTitle("Gallery");
    
        }
    
        @Override
        protected void onResume() {
            super.onResume();
            navigationView.getMenu().getItem(1).setChecked(true);
        }
    }
    

提交回复
热议问题