如何从小部件启动对话框?

Posted

技术标签:

【中文标题】如何从小部件启动对话框?【英文标题】:How to launch a dialog box from a widget? 【发布时间】:2011-12-31 07:28:21 【问题描述】:

我在任何地方都找不到单击小部件时会启动对话框的情况。你有什么想法?

我有这个代码

public void onUpdate(Context c, AppWidgetManager appWidgetManager,int[] appWidgetIds) 
    final int N = appWidgetIds.length;
    AppWidgetManager mgr = AppWidgetManager.getInstance(c);
     for (int i=0; i<N; i++) 
            int appWidgetId = appWidgetIds[i];
    RemoteViews views = new RemoteViews(c.getPackageName(), R.layout.widget_layout);
    Intent fireDialog = new Intent(c,Execute.class);

    Toast test=Toast.makeText(c.getApplicationContext(),"onUpdate",Toast.LENGTH_LONG);
    test.show();
    PendingIntent pendingIntent = PendingIntent.getActivity(c, appWidgetId, fireDialog, PendingIntent.FLAG_UPDATE_CURRENT);
    views.setOnClickPendingIntent(R.id.Button, pendingIntent);
    Log.w(LOG_TAG,"Called");
    mgr.updateAppWidget(appWidgetId, views);
     

【问题讨论】:

您能否详细说明。您的要求是否类似于单击一个按钮,然后您希望出现一个对话框。 ? 你能简单地描述一下你正在使用哪个小部件,而且我认为你可以在那个小部件的 onClickListner 中尝试一下 要求是点击app-widget,会出现一个对话框。 【参考方案1】:

我在这里假设“小部件”是指“应用小部件”,即应用可以添加到用户主屏幕的交互式元素。

应用小部件不能显示Dialog,因为这只能由Activity 完成。不过,您的应用小部件可以通过startActivity() 启动Activity。而且,您可以通过将android:theme="@android:style/Theme.Dialog" 添加到您的元素来为您的活动设置主题,使其看起来像一个对话框。

【讨论】:

是的,我的意思是应用小部件。我还用我目前拥有的代码更新了我的问题 @JustCurious:您的代码似乎没有什么特别之处。确保您的 Execute 活动具有对话框主题。【参考方案2】:

创建一个带有对话框主题的活动,并调用它

<activity android:name=".DailyPillDialog" android:label="@string/app_name" android:theme="@android:style/Theme.Dialog">

【讨论】:

当对话框主题启动时,原始应用程序也会在后台启动。有没有办法启动主应用程序?我的意思是我只想启动对话框【参考方案3】:

您可以create an AlertDialog customized 满足您的需求。然后你可以从另一个小部件(比如 Button)的 onClickListener 回调中 alertDialog.show() 来显示对话框。

【讨论】:

有可能吗? @CommonsWare。我知道如何单独创建一个对话框。问题是如何将它与我的应用小部件结合起来。

以上是关于如何从小部件启动对话框?的主要内容,如果未能解决你的问题,请参考以下文章

当小部件具有配置活动时,无法从小部件启动活动

从小部件启动活动

从小部件单击启动 ViewController 的问题

如何从小部件收听已关闭的活动? (onActivityResult只在Activity中)

如何打开启动器的小部件选择器?

onActivityResult 从未从小部件启动的活动中调用