3

私は入力フィールドと2つのボタン(復帰、保存)のアラートダイアログを持っています。 私の電話で「戻る」ボタンをクリックすると、「あなたは終了してもよろしいですか?」という質問をポップアップする別の確認ダイアログが必要になります。Android:AlertDialogは、いずれかのボタンを2回目にクリックした後で終了します

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回タップするだけで後に第2の確認ダイアログが閉じ:だから、すべてはこのようになります。 私はこれの原因を見つけることができないようです。 ありがとうございます。

答えて

2

OnKeyメソッドが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メソッドが呼び出されます。そこにプロンプ​​トを追加することができます。

関連する問題