2017-10-24 11 views
2

약 3 주 동안 Android 스튜디오에서 배우고 놀려고했습니다. 방금 AlertDialogue가 양수 버튼을 클릭 할 때 해고하지 않는 상황이 발생했습니다.AlertDialog가 닫히지 않고 닫히기 위해 두 번 탭합니다.

private void showGPSDisabledAlertToUser() { 
    AlertDialog.Builder builder; 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     builder = new AlertDialog.Builder(this, android.R.style.Theme_Material_Dialog_Alert); 
    } else { 
     builder = new AlertDialog.Builder(this); 
    } 

    builder.setTitle("Turn On Location/GPS"); 
    builder.setCancelable(false); 
    builder.setMessage("Application Needs To Determine Device's Physical Location."); 
    builder.setPositiveButton("YES, TURN ON", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        dialog.dismiss(); // This ain't working 
        goToInternetSettings(); 
       } 
      }); 
    builder.setNegativeButton("NO, CANCEL", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        closeApplication(); 
       } 
      }); 
    builder.create().show(); 
} 

private void goToInternetSettings() { 
    Intent gpsSetting = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
    startActivity(gpsSetting); 
} 

private void closeApplication() { 
    Intent intent = new Intent(Intent.ACTION_MAIN); 
    intent.addCategory(Intent.CATEGORY_HOME); 
    startActivity(intent); 
} 

양수를 두 번 클릭해야만 대화 상자를 닫을 수 있습니다.

반면에 네거티브 버튼을 사용하면 이러한 문제가 없습니다. 음수 단추는 전체 응용 프로그램을 종료하므로 그 문제를 처리하는 것이 같았을 것입니다.

답변

1

대화 상자 인터페이스 단추의 onClick 메서드 내에서 dialog.dismiss();을 호출하여 경고 대화 상자를 명시 적으로 닫을 필요가 없습니다.

대화 상자는 해당 버튼을 클릭하면 자동으로 닫힙니다.

버튼을 클릭 한 후에도 대화 상자가 사라지지 않는다고 말하면 대화 상자 하나가 닫히고 다른 대화 상자가 없어지도록 여러 개의 대화 상자를 만들었을 수도 있습니다.

+0

감사합니다. 그러나이 경우에는 대화가 자동으로 닫히지 않습니다. 설정에서 돌아 오면 대화창은 열립니다. – Sebastian

+0

'showGPSDisabledAlertToUser()'메소드를 동시에 두 번 호출했을 수도 있습니다. –

1

암시 적으로 호출되기 때문에 dialog.dismiss()setPositiveButton() OnClickListener 안에 호출 할 필요가 없습니다.

GPS 사용 가능 여부를 확인할 때 showGPSDisabledAlertToUser() 번으로 전화를 걸 수 있습니다. 대화 상자를 한 번 만들고 다음과 같이 다시 만들려고 할 수 있습니다.

AlertDialog mAlertDialog; 

private void showGPSDisabledAlertToUser() { 
    // build the alert dialog once. 
    if (mAlertDialog == null) { 
    AlertDialog.Builder builder; 

    ... 
    // Do your dialog initialization here. 
    ... 

    mAlertDialog = builder.create(); 
    } 

    mAlertDialog.show(); 
}