如何先关闭抽屉,然后调用onBackPressed?

问题描述:

我有一个抽屉布局的活动。如何先关闭抽屉,然后调用onBackPressed?

我想检查抽屉是否关闭,然后致电onBackPressed。如果抽屉打开,它应该先关闭然后onBackPressed应该被调用。

我试图这样做使用addDrawerListener

public class MainActivity extends AppCompatActivity { 

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

     setUpUI(); 

     listeners(
    } 

    public void setUpUI() { 
     toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     //Initializing NavigationView 
     navigationView = (NavigationView) findViewById(R.id.navigation_view); 

     drawerLayout = (DrawerLayout) findViewById(R.id.drawer); 
    } 

    public void listeners() 
     drawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() { 
      @Override 
      public void onDrawerSlide(View drawerView, float slideOffset) { 

      } 

      @Override 
      public void onDrawerOpened(View drawerView) { 

      } 

      @Override 
      public void onDrawerClosed(View drawerView) { 
       onBackPressed(); 
      } 

      @Override 
      public void onDrawerStateChanged(int newState) { 

      } 
     }); 

    } 

    @Override 
    public void onBackPressed() 
     drawerLayout.closeDrawer(Gravity.END); 
     if (!mBackPressCancelled) { 
      if (getFragmentManager().getBackStackEntryCount() > 0) { 
       getFragmentManager().popBackStackImmediate(); 
      } else { 
       super.onBackPressed(); 
      } 
     } 
    } 

} 

有了这个抽屉靠拢半应用进行了封闭。我想关闭抽屉,打电话给BaackPressed。

我该怎么做?请帮忙。谢谢。

+0

发表您的错误的logcat –

+0

我没有得到任何错误@ RahulKhurana – Sid

您可以检查是否关闭抽屉或不

if(mDrawerLayout.isDrawerOpen(GravityCompat.END)) { //drawer is open }else{ super.onBackPressed(); }

+0

这只关闭抽屉,关闭抽屉后不会调用BackBressed剂量。 – Sid

+0

您可以在抽屉打开时调用drawerLayout.closeDrawer(Gravity.END); –

+0

我做到了。但它只关闭抽屉onBackPressed – Sid

这将是你的代码:

@Override 
public void onBackPressed() { 
    if(mDrawerLayout.isDrawerOpen(GravityCompat.END)) { 
     mDrawerLayout.closeDrawer(GravityCompat.END) 
    } else { 
     super.onBackPressed(); 
    } 
} 
+0

这只关闭抽屉onBackPressed剂量关闭抽屉后不会被调用。 – Sid

+0

第一次按下它将关闭抽屉。那么第二次的应用程序就会返回。 –