Как поймать выбранное значение из Android-меню Radio Values - PullRequest
0 голосов
/ 28 июня 2010

Я создал список меню переключателей ..

    final CharSequence[] items = { "3 sec", "5 sec", "7 sec" };

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Change Wallpaper Every..");
    builder.setSingleChoiceItems(items, -1,
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int item) {
                    Toast.makeText(getApplicationContext(), items[item],
                            Toast.LENGTH_SHORT).show();
                }
            }); 

    AlertDialog alert = builder.create();
    builder.show();

я хочу поймать выбранное значение из приведенной выше последовательности символов и поместить в переменную

Ответы [ 3 ]

1 голос
/ 28 июня 2010

Я использую фабрики для такого рода вещей:

public interface ChoiceListener {
    void onPositiveResult(String choice);
}

public static AlertDialog getWallpaperDialog(Context ctx,
        final String[] options, int choice, final ChoiceListener listener) {
    AlertDialog.Builder builder = new AlertDialog.Builder(ctx);
    // set title, buttons, etc.
    builder.setSingleChoiceItems(options, choice, new OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            listener.onPositiveResult(options[which]);
            dialog.dismiss();
        }
    });
    return builder.create();
}

Предложения: хранить строковые массивы в ресурсах (например, strings.xml) и придерживаться индексов вместо строк для предпочтений.

1 голос
/ 06 июля 2010

Я пробовал с If ... else

Сначала я объявляю приватную переменную со значением по умолчанию

private static int myChoice = 3000; //3000 is Millisecond = 3 sec 

Затем я добавил условие после Toast.makeText( )

                final CharSequence[] items = { "3 sec", "5 sec", "7 sec", "10 sec" }
                public void onClick(DialogInterface dialog, int item) {
                    Toast.makeText(getApplicationContext(), items[item],
                            Toast.LENGTH_SHORT).show();
                    if (items[item] == "3 sec") {
                        myChoice = 3000;
                    } else if (items[item] == "5 sec") {
                        myChoice = 5000;
                    } else if (items[item] == "7 sec") {
                        myChoice = 7000;
                    } else if (items[item] == "10 sec") {
                        myChoice = 10000;
                    }
                }

Я получил значение таким образом.

1 голос
/ 28 июня 2010

Выбранный элемент - это элемент с индексом item, соответствующая строка - items[item].

Типичный шаблон, чтобы поймать выбор, выглядит так:

public class SomeDialog {

   final CharSequence[] items = { "3 sec", "5 sec", "7 sec" };
   int choice = -1; 

   //...

   public void someMethod() {
     //...
     builder.setSingleChoiceItems(items, -1,
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int item) {
                    Toast.makeText(getApplicationContext(), items[item],
                            Toast.LENGTH_SHORT).show();
                    choice = item;  // <-- now we store the selection to a class member
                }
            }); 
      // ... 
   }

   public String getSelection() {
     return items[choice];  // <-- this allows another class to read the current selection
                            //     often called after the dialog has been closed
   }
}

EDIT

Альтернативой было бы сделать диалог (или часть диалога) наблюдаемым . Диалог будет запускать событие всякий раз, когда выбор изменяется, и любой, заинтересованный в выбранном значении, будет слушать этот источник события.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...