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サポートの断片を使用していない場合は、getSupportFragmentManager()の代わりにgetFragmentManager()を使用してバックスタックカウントを取得する必要があります。ここでは、バックをクリックしたかどうかをチェックするためにブール値を使用しています.2秒後にもう一度クリックされなければ、再びfalseになります。

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

私は自分のコード全体でelse部分を置き換え、 'getFragmentManager'で' getSupportFragmentManager'を置き換えました。そしてそれは魅力のように働いた。 –

+0

@Ishanhrx私はあなたを助けてうれしい、私の答えをupvoteしてください。 –

0

あなたはフラグメントはこれを試して交換する:

fragmentTransaction.add(R.id.container、categoryFragment)。

代わりに

fragmentTransaction.replace(R.id.container、categoryFragment)。

関連する問題