2011-06-16 94 views
2

是否可以从小部件按钮打开自定义对话框?我用一个按钮创建了一个小部件。用this教程,如果我点击ButtonP1烤面包味精出现。但我想要一个自定义对话框出现。本教程中还有一个针对按钮的示例,但对于我的自定义对话框,它不起作用,但是如果我想打开一个活动并且它工作正常。 我想要一个自定义对话框,当用户点击小部件上的一个按钮时出现。Android小部件按钮自定义对话框

下面是这段代码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); 
} 

当我改变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(); 
     } 
    } 
} 

编辑2011年6月21日

谢谢给你们,我能叫的活动与FrameLayout里,这几乎什么我想了。不过,我想用customdialog要做到这一点,但我使用的代码,当我在微件按钮单击它并未显示:

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); 

如果我改变CustomizeDialog.class到Main.class,这是一项活动,它工作正常。

请在上面找到CustomDialog.class的结构。

回答

1

做到这一点的一种方法是在点击您的小部件打开的活动中显示对话框。如果您使用类似FrameLayout的东西,则可以运行似乎悬停在主屏幕顶部的活动。

+0

我不想打开活动。我只想在用户点击小部件按钮时出现一个自定义对话框。 – erdomester 2011-06-16 20:12:11

+0

自从我开发了一个小部件以来已经有一段时间了,但我记得的是,小部件对于您可以做的事情的限制性很强。从我所见过的所有窗口小部件中,像弹出窗口一样通过活动执行操作 – 2011-06-16 23:09:56

+0

没有人知道解决方案吗? Idk如何从一个活动开始弹出窗口或sg,而不会使活动出现 – erdomester 2011-06-18 12:42:52

5

就像坦纳已经指出,你应该使用一个活动。

在清单中,您必须为对话活动添加一些属性。要将活动(对话)放置在新任务的根目录下,没有这个活动将被放置在应用程序的主要活动的顶部。

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> 

在你要调用的活动结束()用户在点击OK后对话活动,取消或后退按钮。如果你不这样做,只有对话框将被关闭,并且活动将保持可见。

我写了一个如何做回来时,我面临同样的问题,同时,可以发现here on my blog.

+0

感谢一直在努力显示从一个小部件的对话框至少关闭对话框取消时的活动检查您的项目并添加setOnCancelListener(新的DialogInterface.OnCancelListener(){等到我的对话完美谢谢吨 – GFlam 2011-06-20 18:02:31