Open next activity only after navigation drawer completes it closing animation

后端 未结 7 425
陌清茗
陌清茗 2020-12-30 10:13

I\'m using Navigation Drawer in my application.

When the user clicks on any of the menu item in drawer, it opens a new Activity (not fr

相关标签:
7条回答
  • 2020-12-30 11:00

    I have found a simple way to get rid of id you may try this and its working and tested.

    OLD ANSWER:

    int id = -1;
     @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        id = item.getItemId();        
    
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
    
        drawer.setDrawerListener(new DrawerLayout.DrawerListener() {
            @Override
            public void onDrawerSlide(View drawerView, float slideOffset) {
            }
    
            @Override
            public void onDrawerOpened(View drawerView) {
            }
    
            @Override
            public void onDrawerClosed(View drawerView) {
                if (id == R.id.NAV_YOUR_ACTIVITY_ONE) {
                    Intent activityIntent = new Intent(getApplicationContext(), YOUR_ACTIVITY_ONE.class);
                    activityIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(activityIntent);
                }
                else if (id == R.id.NAV_YOUR_ACTIVITY_TWO) {
                    Intent activityIntent = new Intent(getApplicationContext(), YOUR_ACTIVITY_TWO.class);
                    activityIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(activityIntent);
                }
    
                //do not forget to set id again to -1 or else it will cause problem
                id=-1;
            }
    
            @Override
            public void onDrawerStateChanged(int newState) {
            }
        }
    }
    

    UPDATE ANSWER:

    You can your ActionBarDrawerToggle too for example observe below code.

    int id = -1;
    
    //Use this function for click effect be performed on drawer item clicked
    public void perfromDrawerNavigation(){
        if (id == R.id.NAV_YOUR_ACTIVITY_ONE) {
                Intent activityIntent = new Intent(getApplicationContext(), YOUR_ACTIVITY_ONE.class);
                activityIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(activityIntent);
            }
            else if (id == R.id.NAV_YOUR_ACTIVITY_TWO) {
                Intent activityIntent = new Intent(getApplicationContext(), YOUR_ACTIVITY_TWO.class);
                activityIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(activityIntent);
            }
    
            //do not forget to set id again to -1 or else it will cause problem
            id=-1;
    }
    
    //you can write this code in onCreate() also
    public void initControl(){
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setTitle(
             getResources().getString(R.string.activity));
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close){
            @Override
            public void onDrawerClosed(View drawerView) {
                super.onDrawerClosed(drawerView);
                if(id != -1){
                   perfromDrawerNavigation();
                }
            }
        };
        drawer.addDrawerListener(toggle);
        toggle.setDrawerIndicatorEnabled(true);
        toggle.syncState();
    }
    
    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        id = item.getItemId();
        drawer.closeDrawer(GravityCompat.START);
    }
    
    0 讨论(0)
提交回复
热议问题