如何在小部件上显示对话框?

4

我希望展示一个对话框,就像在Activity中使用showDialog(...)一样,但我需要在小部件中完成,因此无法使用showDialog(...)。我该怎么做?

我在onReceive方法中尝试过这个,但它崩溃了:

AlertDialog.Builder builder;
            builder = new AlertDialog.Builder(context);
            builder.setMessage("Are you sure?")
            .setCancelable(false)
            .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    db.open();
                    db.remove_last();
                    db.close();
                    dialog.dismiss();
                }
            })
            .setNegativeButton("No", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    dialog.cancel();
                }
            });
            builder.show();

感谢您,Valerio。
2个回答

4
小部件并不支持那种交互方式,并且由于它们在您的启动器UID下运行而不是应用程序UID下运行,因此它们无法访问数据库。(这可能是崩溃的原因,请查看日志以确定。)在您的应用程序中启动一个执行所需操作的活动。如果您希望它看起来像一个对话框,请应用Theme.Dialog样式:
<activity
  android:name=".MyThing"
  android:label="@string/mythinglabel"
  android:theme="@android:style/Theme.Dialog"
/>

数据库不是问题,可以正常运作,即使没有数据库代码也会崩溃。我想创建一个确认对话框! - Skatephone
发布崩溃日志将会很有帮助。 - Blrfl

0

对话框必须来自Activity而不是Widget。


1
这使得编写可重用代码非常痛苦。而且:Spinner 是如何做到的? - Martin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接