在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;
}
答案 0 :(得分:0)
我想存储每个选择 由用户稍后使用。我如何能 那样做?
嗯,在战术级别,在onClick()
中,您可以将数据写入SQLite数据库。
然而,感觉就像你把众所周知的推车放在同样众所周知的马之前。除非您确实计划对数据执行某些操作,否则不要使用对话框来篡改用户。如果您知道要对数据执行什么操作,那么您要对其执行的操作似乎比AlertDialog
引发的ItemizedOverlay
更多地决定了您的存储机制。
以这种方式使用AlertDialog 一个好主意?有更好的选择吗?
它没有明显的错误。
然而,再一次,这个问题在大局之外没有任何意义。这就像询问网页设计师是否“以这种方式使用弹出窗口是一个好主意” - 这只能在网站的整体外观和用户体验的背景下得到真正的回答。因此,无论您是使用AlertDialog
还是某种弹出式面板或某种动画幻灯片式面板或完全独立的活动,还是无论都是您想要的问题你的应用程序要看。
答案 1 :(得分:0)
如果你只需要在内存中访问它,你可以创建一个HashMap<OverLayItem, List<String>>
或HashMap<OverLayItem, List<Boolean>>
来存储每个项目的设置,或者如果你需要更多的持久存储,你可以使用首选项或数据库或您提供的链接中说明的其他方法。然后,您将在正面onClick()
更新哈希地图或数据库。