Ошибка при выполнении setPositiveButton в конструкторе диалоговых окон? - PullRequest
1 голос
/ 23 ноября 2011

Я пытаюсь написать диалоговое окно в моем приложении. Проблема в том, что когда я нажимаю кнопку ОК (SetPositiveButton), отображается следующее Ошибка выполнения

E / AndroidRuntime (702): java.lang.ArrayIndexOutOfBoundsException

Если я пытаюсь выполнить закомментированные строки в приведенном ниже коде, но он хорошо работает в onClick, но показывает некоторые ошибки для setPositiveButton

   @Override
protected Dialog onCreateDialog(int id) {
    switch(id){

 case ONCLICK_EXTRAS:
     return new AlertDialog.Builder(AcricklayoutActivity.this)
     .setIcon(R.drawable.ic_launcher)
     .setTitle("Extras")
     .setSingleChoiceItems(R.array.extras, 0, new DialogInterface.OnClickListener() {
         public void onClick(DialogInterface dialog, int which) {
             String[] items = getResources().getStringArray(R.array.extras);
             value = items[which];
             Log.v("this",String.valueOf(which)+items[which]);
         }
     })
     .setPositiveButton("OK", new DialogInterface.OnClickListener() {
         public void onClick(DialogInterface dialog, int which) {
            // String[] items = getResources().getStringArray(R.array.extras);
            //text.setText(items[which]);
            // Log.v("this",String.valueOf(which)+items[which]);

         }
     })
     .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
         public void onClick(DialogInterface dialog, int which) {


         }
     })
    .create();

Я объясню свой код здесь

  1. Я пытаюсь использовать массив String из файла Resource / values ​​для заполнения моего AlertDialogbox,
  2. И сохранение этого значения в переменной Static String значение

работает нормально до тех пор, пока не будет нажата положительная кнопка диалоговой активности после сбоя этого приложения. Может кто-нибудь помочь мне в этом вопросе ???

Заранее спасибо !!

Ответы [ 2 ]

1 голос
/ 23 ноября 2011
 public void onClick(DialogInterface dialog, int which) { 

Этот which в этом методе сообщает кнопку, которая была нажата, и вы не должны использовать ее в качестве индекса для ваших массивов.which может быть любым из них:

Dialog.BUTTON_NEGATIVE; (value=-2)

Dialog.BUTTON_NEUTRAL;  (value=-3)

Dialog.BUTTON_POSITIVE   (value=-1)

Естественно, если вы используете его для получения значений из массива, он даст вам ArrayIndexOutOfBoundsException

0 голосов
/ 23 ноября 2011

Эта проблема, похоже, не связана с кодом для вашей кнопки, просто с кодом, который запускается при нажатии. Этот код:

String[] items = getResources().getStringArray(R.array.extras);
value = items[which];
Log.v("this",String.valueOf(which)+items[which]);

Кажется, проблема в том, что ваш массив String не имеет значения в позиции which.

Распечатайте ваши значения и целое число (с именем which), чтобы убедиться, что значение в этой позиции не существует. Затем измените свой код в соответствии с желаемым результатом.

...