如何在ItemizedOverlay onTap方法中生成的AlertDialog中保留选项

时间:2010-06-07 19:54:36

标签: android android-mapview alertdialog itemizedoverlay

AlertDialog的{​​{3}}选项说明中,官方Android文档提到使用“how to add a list之一”保存用户首选项。这些示例假定AlertDialog已在Activity类中生成。

在我的情况下,我创建了一个扩展ItemizedOverlay的类。此类会覆盖onTap方法,并使用AlertDialog提示用户生成data storage techniques。我想捕捉并保留他们点击的每个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 :(得分:0)

  

我想存储每个选择   由用户稍后使用。我如何能   那样做?

嗯,在战术级别,在onClick()中,您可以将数据写入SQLite数据库。

然而,感觉就像你把众所周知的推车放在同样众所周知的马之前。除非您确实计划对数据执行某些操作,否则不要使用对话框来篡改用户。如果您知道要对数据执行什么操作,那么您要对其执行的操作似乎比AlertDialog引发的ItemizedOverlay更多地决定了您的存储机制。

  

以这种方式使用AlertDialog   一个好主意?有更好的选择吗?

它没有明显的错误。

然而,再一次,这个问题在大局之外没有任何意义。这就像询问网页设计师是否“以这种方式使用弹出窗口是一个好主意” - 这只能在网站的整体外观和用户体验的背景下得到真正的回答。因此,无论您是使用AlertDialog还是某种弹出式面板或某种动画幻灯片式面板或完全独立的活动,还是无论都是您想要的问题你的应用程序要看。

答案 1 :(得分:0)

如果你只需要在内存中访问它,你可以创建一个HashMap<OverLayItem, List<String>>HashMap<OverLayItem, List<Boolean>>来存储每个项目的设置,或者如果你需要更多的持久存储,你可以使用首选项或数据库或您提供的链接中说明的其他方法。然后,您将在正面onClick()更新哈希地图或数据库。