0

私はナビゲーション・ドロワー・メニューもあるフラグメント・ページ数が少ないアプリケーションに取り組んでいます。ナビゲーション・ドロワーとフラグメント・ページのバック・キーの処理

フラグメントページで[戻る]キーをクリックすると、アプリケーション終了ダイアログが正常に動作しています。しかし、私が任意のフラグメントページにいるときに、同時にナビゲーションメニューをクリックすると、ナビゲーションメニューがトップポジションになります。ここで私はバックキーをクリックすると、アプリケーションの終了ボタンが来ているが、私はナビゲーションメニューが最初に終了ダイアログボックスが消えるはずです。

onBackPressedのコード():

public void onBackPressed() 
{ 
     final FragmentManager fm = getSupportFragmentManager(); 

     if(fm.getBackStackEntryCount() != 1){ 
      super.onBackPressed(); 

     } 
     else 
     { 

      AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this); 
      alertDialogBuilder.setTitle("Exit Application?"); 
      alertDialogBuilder 
        .setMessage("Click yes to exit!") 
        .setCancelable(false) 
        .setPositiveButton("Yes", 
          new DialogInterface.OnClickListener() { 
           public void onClick(DialogInterface dialog, int id) { 
            moveTaskToBack(true); 
            android.os.Process.killProcess(android.os.Process.myPid()); 
            System.exit(1); 
           } 
          }) 

        .setNegativeButton("No", new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int id) { 

          dialog.cancel(); 
         } 
        }); 

      AlertDialog alertDialog = alertDialogBuilder.create(); 
      alertDialog.show(); 
     } 
    } 

================================= =========================================

Code for onDrawerItemClick(): 

private void onDrawerItemClick(final int item) { 
     UserService userService = new UserService(this); 
     switch (item) { 
      case TEST1: 
       test1(); 
       break; 
      case TEST2: 
       test2(); 
       break; 
      case LOGOUT: 
       userService.logout(); 
       finish(); 
       Toast.makeText(MenuActivity.this, "LOGOUT", Toast.LENGTH_SHORT).show(); 
       break; 
     } 
     mDrawerLayout.closeDrawer(GravityCompat.START); 
    } 

答えて

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

ありがとうございます。それは完璧に働いた。 –

0

onBackPressed()まず、引き出しが開いているかどうかを確認しなければなりません。引き出しが開いていれば、通常のものを閉じます。

public void onBackPressed() 
{ 
    final FragmentManager fm = getSupportFragmentManager(); 
    if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) { 
     mDrawerLayout.closeDrawer(GravityCompat.START); 
    } else if(fm.getBackStackEntryCount() != 1){ 
     super.onBackPressed(); 
    } 
    else 
    { 

     AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this); 
     alertDialogBuilder.setTitle("Exit Application?"); 
     alertDialogBuilder 
       .setMessage("Click yes to exit!") 
       .setCancelable(false) 
       .setPositiveButton("Yes", 
         new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int id) { 
           moveTaskToBack(true); 
           android.os.Process.killProcess(android.os.Process.myPid()); 
           System.exit(1); 
          } 
         }) 

       .setNegativeButton("No", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 

         dialog.cancel(); 
        } 
       }); 

     AlertDialog alertDialog = alertDialogBuilder.create(); 
     alertDialog.show(); 
    } 
} 
+0

あなたのソリューションもチェックしました。それはあまりにも働いた:) –

+0

Ok ....素晴らしい:) –

0

それはとても簡単です。このようなあなたの場合

。私にあなたの心を見せてあげてください。

public void onBackPressed() 
{ 
    //The first line, you should check your drawer status. 
    if(drawerIsOpen){ 
     closeDrawer(); 
    } 
    else{ 
     //show your exit dialog. 
    } 
} 
関連する問題