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

OnKey 방법은 두 번 호출됩니다 아래 키에 대한 첫 번째 시간, 키를 백업을위한 두 번째, 그래서 당신은 필터링 할 수 있습니다

그래서 코드

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 메서드가 호출됩니다. 그래서 거기에 프롬프트를 추가 할 수 있습니다.

관련 문제