문제

성공할 때 사용자에게 다음 단계 도전을 보여주기 위해 AlertDialog를 만들었습니다. 따라서 해당 코드는 다음과 같습니다. 게임이 성공하면 showdialog (r.id.display_success)이 호출되고 다음 코드가 실행됩니다.

따라서 모든 통화 에서이 코드를 실행할 것으로 기대합니다. 하지만; 게임은 한 번만 실행하고 다른 모든 실행에서 동일한 경고를 표시합니다. 첫 번째 인스턴스가 생성 된 후에는 인스턴스가 생성되지 않고 첫 번째 인스턴스가 항상 사용됩니다.

case R.id.display_success:           
       updateGameSettings();
       message = formatLevel()
       + formatMission();
       return new AlertDialog.Builder(this)
       .setIcon(R.drawable.smiley_happy)
       .setTitle(R.string.dialog_success)
       .setMessage(message)
       .setPositiveButton(R.string.alert_dialog_newgame, new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog,     int whichButton) {
                       startANewGame();
               }
       })
       .setNegativeButton(R.string.exit, new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int whichButton) {
                     finish();
               }
       })
       .create();
도움이 되었습니까?

해결책 2

대화 상자가 표시되면 onpreparedialog 메소드가 호출됩니다. 따라서이 방법을 재정의하여 텍스트 나 다른 기능을 변경하는 것이 좋습니다.

다른 팁

onpreparedialog의 일관되지 않은 행동에 대한 수정이 있다고 생각합니다. 처음에 대화 상자를 만들 때 (여전히 AlertDialog.Builder 일 때) 메시지를 초기 상태 (NULL 아님)로 설정해야합니다. 따라서 대화 상자를 만들 때 메시지에 항상 널 값이 아닌 값을 갖도록 이와 같은 작업을 수행하십시오. 나는 이것으로 며칠 동안 어려움을 겪고 우연히이 솔루션을 발견했습니다.

AlertDialog.Builder resultAlert = new AlertDialog.Builder(context);

if ( message == null ) {
    resultAlert.setMessage("");
} else {
    resultAlert.setMessage(message);
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top