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);