erd*_*ter 2 android widget button
是否可以从小部件按钮打开自定义对话框?我用按钮创建了一个小部件.在本教程中,如果我单击ButtonP1,则会出现一个toast msg.但我想要一个自定义对话框出现.教程中的按钮还有一个意图示例,但对于我的自定义对话框,它无法正常工作,但是如果我想打开一个活动,那就可以了.我想在用户点击窗口小部件上的按钮时显示自定义对话框.
以下是Main.class是一个活动的代码:
public class HelloWidget extends AppWidgetProvider {
public static String ACTION_WIDGET_CONFIGURE = "ConfigureWidget";
public static String ACTION_WIDGET_RECEIVER = "ActionReceiverWidget";
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
context.startService(new Intent(context, UpdateService.class));
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widgetmain);
Intent configIntent = new Intent(context, Main.class);
configIntent.setAction(ACTION_WIDGET_CONFIGURE);
PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, 0);
remoteViews.setOnClickPendingIntent(R.id.ButtonP1, configPendingIntent);
appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
}
Run Code Online (Sandbox Code Playgroud)
当我将Main.class更改为CustomizeDialog.class时,没有任何反应.
CustomizeDialog.java简而言之:
public class CustomizeDialog extends Dialog implements OnClickListener {
Activity mActivity;
public CustomizeDialog(Activity activity) {
super(activity);
mActivity = activity;
...
}
@Override
public void onClick(View v) {
if (v == okButton)
{
dismiss();
}
if (v == cancelButton)
{
dismiss();
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑06.21.2011
谢谢你们,我能用framelayout调用一个活动,这几乎就是我想要的.但是,我想用customdialog做这个,但是使用我正在使用的代码,当我点击widget按钮时它不会出现:
Intent configIntent = new Intent(context, CustomizeDialog.class);
configIntent.setAction(ACTION_WIDGET_CONFIGURE);
PendingIntent configPendingIntent = PendingIntent.getActivity(context, REQUEST_CODE_THREE, configIntent, 0);
remoteViews.setOnClickPendingIntent(R.id.ButtonP3, configPendingIntent);
Run Code Online (Sandbox Code Playgroud)
如果我将CustomizeDialog.class更改为Main.class,这是一个活动,它工作正常.
请在上面找到CustomDialog.class的结构.
就像Tanner已经指出的那样你应该使用一个Activity.
在清单中,您必须向对话框活动添加一些属性.
android:launchMode ="singleInstance" - 将活动(对话框)放在新任务的根目录下,如果没有这个,活动将被置于应用程序的主要活动之上.
android:excludeFromRecents ="true" - 所以你不能通过长按home键来到达对话框.
android:theme ="@ android:style/Theme.Dialog" - 将其设置为对话框.
<activity android:name=".InputDialog"
android:launchMode="singleInstance"
android:theme="@android:style/Theme.Dialog"
android:excludeFromRecents="true">
</activity>
Run Code Online (Sandbox Code Playgroud)
在对话框活动中,您必须在用户单击"确定","取消"或"后退"按钮后调用活动上的finish().如果不这样做,则仅关闭对话框并且活动将保持可见.
当我遇到同样的问题时,我写了一段时间的回答,可以在我的博客上找到.