2011-05-10 5 views
5

코드에서 뒤로 버튼을 누르면 대화 상자가 두 번 표시됩니다. 아무도 대화 상자를 한 번만 가져 오는 방법을 알려주시겠습니까?뒤로 버튼을 눌렀을 때 두 번 표시된 대화 상자

public boolean onKeyDown(int keyCode, KeyEvent event) 
    { 
     if ((keyCode == KeyEvent.KEYCODE_BACK)) 
     { 
      onBackPressed(); 
     } 
     return super.onKeyDown(keyCode, event); 
     } 

public void onBackPressed() 
    { 

      AlertDialog.Builder builder = new AlertDialog.Builder(this); 
      builder.setMessage("Do you want to save configuration?"); 
      builder.setPositiveButton 
          ("Yes", new DialogInterface.OnClickListener() 
      { 
       public void onClick(DialogInterface dialog, int id) 
       { 
       //here saveConfiguration is boolean type  
        if (saveConfiguration()) 

               { 
         dialog.dismiss(); 
         finish(); 

        } 
        else 
        { 
         dialog.dismiss(); 
        } 

       } 
      }); 
      builder.setNegativeButton("No", new DialogInterface.OnClickListener() 
      { 
       public void onClick(DialogInterface dialog, int id) 
       { 
        dialog.dismiss(); 
        finish(); 
       } 
      }); 
      builder.show(); 
    } 



} 

답변

14

는 백업 키 즉, 아래로 키와 키의 두 가지 이벤트를 소비 .. 그 중 하나가 제한되어 있기 때문에 귀하의 대화 상자가 두 번오고있다 ..

   if (event.getAction() != KeyEvent.ACTION_DOWN) 
{ 

     /* Now call onBackPressed method here */ 
} 
+2

감사합니다. Deepak.This 메서드도 잘 작동합니다. – akhil2003in

1

onBackPressed()은의 standart 활동입니다 메서드

이 작업을 수동으로 onKeyDown에서 호출 한 다음 super.onKeyDown (keyCode, event) (이벤트를 등록한 상태에서 다시 누르면 onBackPressed()가 자동으로 호출 됨)을 통해 이벤트를 위임하여 다시 호출하는 중입니다.);

key back pressed 이벤트로 작업하려면, onkeyDown 메소드를 entierly 제거하고 onBackPressed() 만 사용하거나 onBackPressed()를 고유 한 이름으로 변경하십시오.

+0

감사합니다 알렉스, 나는 onKeyDown method.now를 제거했습니다. – akhil2003in

관련 문제