Как сохранить параметры, выбранные в AlertDialog, порожденном из метода onTap ItemizedOverlay - PullRequest
0 голосов
/ 07 июня 2010

В описании как добавить список опций в AlertDialog официальная документация Android намекает на сохранение предпочтений пользователя с помощью одной из " техник хранения данных . " В примерах предполагается, что AlertDialog был порожден в классе Activity.

В моем случае я создал класс, который расширяет ItemizedOverlay. Этот класс переопределяет метод onTap и использует AlertDialog, чтобы предложить пользователю сделать выбор с множественным выбором . Я хотел бы захватить и сохранить выбор для каждого OverlayItem, на который они нажимают.

Код ниже - это метод onTap, который я написал. Он работает так, как написано, но пока не делает то, на что я надеюсь. Я хотел бы сохранить и сохранить каждый выбор, сделанный пользователем, для последующего использования. Как я могу это сделать? Является ли использование AlertDialog таким способом хорошей идеей? Есть ли лучшие варианты?

protected boolean onTap(int index)
{
    OverlayItem item = _overlays.get(index);
    final CharSequence[] items = { "WiFi", "BlueTooth" };
    final boolean[] checked = { false, false };

    AlertDialog.Builder builder = new AlertDialog.Builder(_context);
    builder.setTitle(item.getTitle());
    builder.setMultiChoiceItems(items, checked, new
        DialogInterface.OnMultiChoiceClickListener()
        {
          @Override
          public void onClick(DialogInterface dialog, int item,
              boolean isChecked)
              {
                  // for now just show that the user touched an option
                  Toast.makeText(_context, items[item],
                    Toast.LENGTH_SHORT).show();
              }
        });
    builder.setPositiveButton("Okay", new DialogInterface.OnClickListener()
    {
        @Override
        public void onClick(DialogInterface dialog, int id)
        {
            // should I be examining what was checked here?
            dialog.dismiss();
        }
    });

    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener()
    {
        @Override
        public void onClick(DialogInterface dialog, int id)
        {
            dialog.cancel();
        }
    });

    AlertDialog alert = builder.create();
    alert.show();
    return true;
}

Ответы [ 2 ]

0 голосов
/ 08 июня 2010

Ну, вы можете создать HashMap<OverLayItem, List<String>> или HashMap<OverLayItem, List<Boolean>> для хранения настроек для каждого элемента, если вам нужен только доступ к нему в памяти или если вам нужно более постоянное хранилище, вы можете использовать либо настройки, либо базу данных, либо другое означает, как описано в ссылке, которую вы предоставили. Затем вы обновите хеш-карты или вашу базу данных в положительном onClick().

0 голосов
/ 08 июня 2010

Я хотел бы сохранить каждый сделанный выбор пользователем, который будет использоваться позже. Как я сделать это?

Ну, на тактическом уровне, в вашем onClick() вы можете записать данные в базу данных SQLite.

Тем не менее, вы чувствуете, как будто вы ставите телегу с пословицами перед лошадью с такой же пословицей. Если вы на самом деле не планируете что-то делать с данными, не обманывайте пользователя с помощью диалогов. Если вы знаете, что вы хотите делать с данными, то то, что вы хотите делать с ними, может показаться, что ваш механизм хранения данных гораздо больше, чем тот факт, что это AlertDialog, увеличенное на ItemizedOverlay.

Использует AlertDialog таким образом хорошая идея? Есть ли лучшие варианты?

В этом нет ничего плохого.

Однако, опять же, этот вопрос не имеет смысла вне общей картины. Это все равно, что спросить веб-дизайнера, если использование всплывающего окна «таким образом - хорошая идея» - на это можно ответить только в контексте общего внешнего вида и пользовательского опыта сайта. Так что, хотите ли вы использовать AlertDialog или какую-то всплывающую панель, или какую-то анимированную вставную панель, или совершенно отдельное занятие, или независимо от того, - это вопрос того, как вы хотите, чтобы ваше приложение смотреть.

...