2016-08-23 37 views
2

我正在使用帶有一些碎片的簡單導航抽屜Activity。我還在onBackPressed()下實現了doubleBackToExitPressedOnce方法。如果已經定義了抽屜式背部開啓和關閉操作。所以我修改,如代碼:如何處理兩次以退出導航抽屜的功能

@Override 
public void onBackPressed() { 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    assert drawer != null; 

    if (drawer.isDrawerOpen(GravityCompat.START)) { 
     drawer.closeDrawer(GravityCompat.START); 
    } 
    else if (doubleBackToExitPressedOnce) { 
     super.onBackPressed(); 
    } 

    this.doubleBackToExitPressedOnce = true; 
    Toast.makeText(this, "Press again to exit", Toast.LENGTH_SHORT).show(); 

    new Handler().postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      doubleBackToExitPressedOnce = false; 
     } 
    }, 2000); 
} 

現在我的問題是當導航抽屜打開,我點擊後退鍵關閉它,然後再我想從應用程序退出。但每次都會顯示「再按一次退出」。在某些情況下非常煩人。請幫幫我。

回答

1

drawer一個實例變量在您的Activity

DrawerLayout drawer; 

初始化它onCreate()

drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 

然後,這樣的事情應該工作:

@Override 
public void onBackPressed() { 
    if (drawer.isDrawerOpen(GravityCompat.START)) { 
     drawer.closeDrawer(GravityCompat.START); 
    } else if (doubleBackToExitPressedOnce) { 
     super.onBackPressed(); 
    } else { 
     doubleBackToExitPressedOnce = true; 
     Toast.makeText(this, "Press again to exit", Toast.LENGTH_SHORT).show(); 

     new Handler().postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       doubleBackToExitPressedOnce = false; 
      } 
     }, 2000); 
    } 
} 
+0

非常好,你做了我的一天。謝謝你 – MaAc

0

試試這個..

if (drawer.isDrawerOpen(GravityCompat.START)) { 
    drawer.closeDrawer(GravityCompat.START); 
} 
else if (doubleBackToExitPressedOnce) { 
this.doubleBackToExitPressedOnce = true; 
Toast.makeText(this, "Press again to exit", Toast.LENGTH_SHORT).show(); 
new Handler().postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     doubleBackToExitPressedOnce = false; 
    } 
}, 2000); 

} 

else 
{ 
super.onBackPressed(); 
//finish(); 
} 
0

你需要使用return語句具有如下。

@Override 
    public void onBackPressed() { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     assert drawer != null; 

     if (drawer.isDrawerOpen(GravityCompat.START)) { 
      drawer.closeDrawer(GravityCompat.START); 
      return; 
     } 
     else if (doubleBackToExitPressedOnce) { 
      super.onBackPressed(); 
      return; 
     } 

     this.doubleBackToExitPressedOnce = true; 
     Toast.makeText(this, "Press again to exit", Toast.LENGTH_SHORT).show(); 

     new Handler().postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       doubleBackToExitPressedOnce = false; 
      } 
     }, 2000); 
    }