0

我在我的應用程序中有多個片段,並且doubleBackPress退出。問題是,無論活動中顯示哪個片段,都會激活退出doubleBackPress。如何處理碎片中的BackPress?

這是我試過的。

的代碼在MainActivity

@Override 
public void onBackPressed() { 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    if (drawer.isDrawerOpen(GravityCompat.START)) { 
     drawer.closeDrawer(GravityCompat.START); 
    } else { 
     if (doubleBackToExitPressedOnce) { 
      if (getFragmentManager().getBackStackEntryCount() > 0) { 
       getFragmentManager().popBackStack(); 
      } else { 
       super.onBackPressed(); 
      } 
      return; 
     } 

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

     new Handler().postDelayed(new Runnable() { 

      @Override 
      public void run(){ 
       doubleBackToExitPressedOnce=false; 
      } 
     }, 2000); 
    } 
} 

這是怎麼了啓動片段。

fragmentManager = getFragmentManager() ; 
fragmentTransaction = fragmentManager.beginTransaction(); 
CategoryFragment categoryFragment = new CategoryFragment(); 
fragmentTransaction.replace(R.id.container,categoryFragment); 
fragmentTransaction.addToBackStack(null); 
fragmentTransaction.commit(); 

回答

1

您可以參考下面的代碼來滿足您的需要。如果您沒有使用v4支持片段,那麼您必須使用getFragmentManager()而不是getSupportFragmentManager()來獲得後臺堆棧計數。在這裏,我使用布爾值來檢查是否點擊了返回,如果在2秒內沒有再次點擊,它將再次變爲假。

boolean doubleBackToExitPressedOnce = false; 
    @Override 
    public void onBackPressed() { 
     //Checking for fragment count on backstack 
     if (getSupportFragmentManager().getBackStackEntryCount() > 0) { 
      getSupportFragmentManager().popBackStack(); 
     } else if (!doubleBackToExitPressedOnce) { 
      this.doubleBackToExitPressedOnce = true; 
      Toast.makeText(this,"Please click BACK again to exit.", Toast.LENGTH_SHORT).show(); 

      new Handler().postDelayed(new Runnable() { 

       @Override 
       public void run() { 
        doubleBackToExitPressedOnce = false; 
       } 
      }, 2000); 
     } else { 
      super.onBackPressed(); 
      return; 
     } 
    } 

我希望這可以幫助你。

+0

我用整個代碼取代了我的其他部分,'getSupportFragmentManager'替換爲'getFragmentManager'。它的作用就像魅力。非常感謝你 –

+0

@Ishanhrx我很樂意幫助你,請高舉我的答案。 –

0

您正在更換片段試試這個:

fragmentTransaction.add(R.id.container,categoryFragment);

代替

fragmentTransaction.replace(R.id.container,categoryFragment);