3

我有一個帶有輸入欄和兩個按鈕(恢復,保存)的警報對話框。 當我點擊手機上的「返回」按鈕時,我想另一個確認對話框彈出詢問:「您確定要完成嗎?」。所以,這一切看起來是這樣的:Android:AlertDialog僅在第二次點擊任何按鈕後關閉

public void showNewItemDialog(final int...position) { 
    LayoutInflater li = LayoutInflater.from(HostActivity.this); 
    View promptsView = li.inflate(R.layout.item_dialog, null); 
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
      HostActivity.this); 
    alertDialogBuilder.setView(promptsView); 
    userInput = (EditText) promptsView.findViewById(R.id.editTextDialogUserInput); 
    if(position.length>0){ 
     userInput.setText(listFragment.getmItems().get(position[0]).getTitle()); 
     userInput.setSelection(userInput.length()); 
     userInput.requestFocus(); 
    } 
    alertDialogBuilder 
      .setCancelable(false) 
      .setPositiveButton("OK", 
        new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int id) { 
          String title = userInput.getText().toString(); 
          if(listFragment.getItemClickType() == Utility.ItemClick.SHORT){ 
           listFragment.editRowItem(title, position[0]); 
          }else if(listFragment.getItemClickType() == Utility.ItemClick.LONG){ 

          }else if(listFragment.getItemClickType() == Utility.ItemClick.ADD_BUTTON){ 
           listFragment.addRowItem(title); 
          } 

         } 
        }) 
      .setNegativeButton("Revert", 
        new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int id) { 
          dialog.cancel(); 
         } 
        }); 
    newItemalertDialog = alertDialogBuilder.create(); 

    newItemalertDialog.setOnKeyListener(new Dialog.OnKeyListener() { 
     @Override 
     public boolean onKey(DialogInterface arg0, int keyCode, 
          KeyEvent event) { 
      if (keyCode == KeyEvent.KEYCODE_BACK) { 
       new AlertDialog.Builder(HostActivity.this) 
         .setIcon(android.R.drawable.ic_dialog_alert) 
         .setTitle("Add Item") 
         .setMessage("Are you sure you want to finish?") 
         .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, int which) { 
           dialog.dismiss(); 
           newItemalertDialog.dismiss(); 
          } 
         }).setNegativeButton("No", null).show(); 
      } 
      return false; 
     } 
    }); 
    newItemalertDialog.show(); 
} 

它所有的作品,但第二個確認對話框關閉我在任何按鈕點擊後,才兩次(否,是)。 我似乎無法找到原因。 謝謝。

回答

2

安其方法被調用了兩次:第一次按下按鍵,併爲關鍵了第二次,所以你必須過濾:

所以更改如下代碼

newItemalertDialog.setOnKeyListener(new Dialog.OnKeyListener() { 
     @Override 
     public boolean onKey(DialogInterface arg0, int keyCode, 
          KeyEvent event) { 
      if (event.getAction() != KeyEvent.ACTION_DOWN) 
       return true; 

       if (keyCode == KeyEvent.KEYCODE_BACK) { 
         new AlertDialog.Builder(MemberShipActivity.this) 
          .setIcon(android.R.drawable.ic_dialog_alert) 
          .setTitle("Add Item") 
          .setMessage("Are you sure you want to finish?") 
          .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
           @Override 
           public void onClick(DialogInterface dialog, int which) { 
            dialog.cancel(); 
            newItemalertDialog.dismiss(); 
           } 
          }).setNegativeButton("No", null).show(); 
        Log.e("Key","back"); 
       } 
      return false; 
     } 
    }); 
+0

完美!謝謝。 – Sermilion

0
@Override 
public void onBackPressed() { 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setMessage("Are you sure you want to exit?") 
      .setCancelable(false) 
      .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        MyActivity.this.finish(); 
       } 
      }) 
      .setNegativeButton("No", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        dialog.cancel(); 
       } 
      }); 
    AlertDialog alert = builder.create(); 
    alert.show(); 

} 

試試這段代碼。 當你按回OnBackPressed方法會調用。所以你可以在那裏添加提示。

相關問題