الروبوت: لا يمكن تغيير النص يظهر في AlertDialog

StackOverflow https://stackoverflow.com/questions/834139

  •  08-07-2019
  •  | 
  •  

سؤال

وأنا خلقت AlertDialog لإظهار التحديات المستوى التالي المستخدم عند نجحت واحدة. لذلك، رمز المقابلة هو من هذا القبيل. عندما نجحت اللعبة showDialog (R.id.display_success) ويسمى ويتم تنفيذ التعليمات البرمجية التالية.

وهكذا، وأنا أتوقع أن تنفيذ هذه التعليمات البرمجية في كل مكالمة. ومع ذلك؛ لعبة يتم تنفيذ مرة واحدة فقط وتظهر نفس AlertDialog في كل عملية إعدام آخرين. أعني، مثل عدم إنشاء المثيل بعد إنشاء أول واحد، ويستخدم في المقام الأول في كل وقت.

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)، لديك لتعيين الرسالة إلى الحالة الأولية (غير فارغة) أو سوف onPrepareDialog NOT الكتابة الرسالة مع قيمة المقصود. حتى عندما كنت تهيئة الحوار، أن تفعل شيئا مثل هذا أن يكون دائما قيمة غير فارغة في الرسالة. أنا ناضلت مع هذا لعدة أيام وجدت هذا الحل عن طريق الصدفة:

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

if ( message == null ) {
    resultAlert.setMessage("");
} else {
    resultAlert.setMessage(message);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top