2015-09-19 2 views
0

Я использую AlertDialog в моей программе, всякий раз, когда я действительно нажмите на любой из пункта в диалоге, всегда получаю:java.lang.ArrayIndexOutOfBoundsException: length = 12; Индекс = -1

java.lang.ArrayIndexOutOfBoundsException: length=12; index=-1 

Вот моя реализация:

 builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 

     @Override 
     public void onClick(DialogInterface dialog, int which) { 

      Log.d("which::--", String.valueOf(which)); 

     }); 
+0

поста полного исходного кода – sasikumar

+0

@sasikumar, но почему вам нужен полный исходного код? – Oreo

+0

ArrayIndexOutOfBoundsException, поэтому вы допустили ошибку в массиве. Вот почему нужен код для справки – sasikumar

ответ

0

По документация, параметр «which» указывает «Кнопка, которая была нажата (например, BUTTON1) или позиция щелкнутого элемента».

Здесь вы помещаете свой слушатель (DialogInterface.OnClickListener()) в свой PositiveButton, поэтому «который» всегда будет возвращать BUTTON1 или BUTTON_POSITIVE (см. Здесь http://developer.android.com/reference/android/content/DialogInterface.html).

Вы должны поставить слушателя в свой список с помощью функции

setSingleChoiceItems (CharSequence[] items, int checkedItem, DialogInterface.OnClickListener listener), например или setMultiChoiceItems (CharSequence[] items, boolean[] checkedItems, DialogInterface.OnMultiChoiceClickListener listener), если вы хотите разрешить выбор мульти-элементов.

1

Вот простое решение, чтобы получить index or position из нажатых:

int selectedPosition = ((AlertDialog)dialog).getListView().getCheckedItemPosition(); 
Смежные вопросы