2016-11-22 9 views
0

私のonBackPressed()私のアプリから私を送ります。どうすればこれを避けることができますか?最後に表示された断片に戻ってくるか、特定の断片に私を送るかのどちらかです。OnBackPressed()アプリケーションを終了します

@Override 
public void onBackPressed() { 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    if (drawer.isDrawerOpen(GravityCompat.START)) { 
     drawer.closeDrawer(GravityCompat.START); 
    } 
    else{ 
     super.onBackPressed(); 
    } 
} 
+0

フラグメントをバックスタックに追加するか、フラグメントをリロードして手動で管理します –

答えて

1

あなたが断片android.support.v4.app.Fragmentを使用している場合は、これを試してみてください。その後

@Override 
public void onBackPressed() { 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    if (drawer.isDrawerOpen(GravityCompat.START)) { 
     drawer.closeDrawer(GravityCompat.START); 
    } 
    else if (getSupportFragmentManager().getBackStackEntryCount() > 0) { 
     // handling fragment backbutton navigation 
     getSupportFragmentManager().popBackStack(); 
    } else { 
     if (allowExit) { 

      super.onBackPressed(); 
     } else { 
      Toast.makeText(this, getString(R.string.app_exit_message), Toast.LENGTH_SHORT).show(); 
      allowExit = true; 
      new Handler().postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        allowExit = false; 
       } 
      }, 3000); 
     } 
    } 
} 

private boolean allowExit = false; 

あなたが

@Override 
public void onBackPressed() { 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    if (drawer.isDrawerOpen(GravityCompat.START)) { 
     drawer.closeDrawer(GravityCompat.START); 
    } 
    else if (getFragmentManager().getBackStackEntryCount() > 0) { 
     // handling fragment backbutton navigation 
     getFragmentManager().popBackStack(); 
    } else { 
     if (allowExit) { 

      super.onBackPressed(); 
     } else { 
      Toast.makeText(this, getString(R.string.app_exit_message), Toast.LENGTH_SHORT).show(); 
      allowExit = true; 
      new Handler().postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        allowExit = false; 
       } 
      }, 3000); 
     } 
    } 
} 

を交換し、string.xmlをにメッセージを追加する必要がフラグメントをサポートして使用していない場合

<string name="app_exit_message">Press again to exit</string> 
0

次のコードを試してください。
1.引き出しを開けると、引き出しが閉じます。
2.任意のフラグメントがバックスタックにある場合は、前のフラグメントに移動します。
3. No Fragmentがバックスタックにある場合、アプリケーションを終了します。

 @Override 
     public void onBackPressed() { 
      DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
      if (drawer.isDrawerOpen(GravityCompat.START)) { 
       drawer.closeDrawer(GravityCompat.START); 
      } else { 
       oneStepBack(); 
      } 
     } 

     /** 
     * function to go back to previous fragment 
     */ 
     private void oneStepBack() { 
      FragmentTransaction fts = getSupportFragmentManager().beginTransaction(); 
      FragmentManager fragmentManager = getSupportFragmentManager(); 
      showOutput("Back Stack Count>>>>>>>>>>" + fragmentManager.getBackStackEntryCount()); 
      if (fragmentManager.getBackStackEntryCount() >= 2) { 
       fragmentManager.popBackStackImmediate(); 
       fts.commit(); 
      } else { 
       finish(); 
      } 
     } 
0
public void onBackPressed() { 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    if (drawer.isDrawerOpen(GravityCompat.START)) { 
     drawer.closeDrawer(GravityCompat.START); 
    } 
    else{ 

     write your code here what activity you want to open on back press and remove below line 
     //super.onBackPressed(); 
    } 
} 
関連する問題