【问题标题】:Widget launches Dialog on click小部件在单击时启动对话框
【发布时间】:2011-02-24 06:12:21
【问题描述】:

是否可以在小部件点击时启动一个对话框,或者我必须在小部件点击时启动一个 Activity,然后是一个对话框?

【问题讨论】:

    标签: android


    【解决方案1】:

    我相信你已经解决了这个问题,但我还是会写在这里,以防像我这样的其他人得到这个答案。

    要通过单击小部件来启动对话框,您可以定义一个样式类似于对话框的活动,并在小部件被单击时启动它。

    首先在manifest中添加activity,我们称之为DialogWidgetActivity

    <activity
        android:name=".DialogWidgetActivity"
        android:theme="@android:style/Theme.Dialog"
        ...
    />
    

    然后在你的 WidgetProvider 中,我们称之为MyWidgetProvider 绑定小部件的点击和活动的启动

    public class MyWidgetProvider extends AppWidgetProvider {
    
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,
            int[] appWidgetIds) {
    
        final int N = appWidgetIds.length;
    
        // Perform this loop procedure for each App Widget that belongs to this
        // provider
        for (int i = 0; i < N; i++) {
            int appWidgetId = appWidgetIds[i];
    
            // Create an Intent to launch the activity-dialog
            Intent intent = new Intent(context, DialogWidgetActivity.class);
            PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
    
            // Get the layout for the App Widget and attach an on-click listener
            // to it
            RemoteViews views = new RemoteViews(context.getPackageName(),
                    R.layout.widget);
            views.setOnClickPendingIntent(R.id.widget_container, pendingIntent);
    
            // Tell the AppWidgetManager to perform an update on the current app
            // widget
            appWidgetManager.updateAppWidget(appWidgetId, views);
        }
    
    }
    }
    

    请注意,这里我们已将活动的启动绑定到对话框的 widget_container 元素上的单击。您可以通过将 ID widget_container android:id="@+id/widget_container" 分配给小部件布局的根元素来轻松实现此目的。

    然后您可以编写您的活动对话框及其布局,就像您为正常的全屏活动所做的那样。

    我的来源是this answerthe Android documentation

    希望我能帮上忙:)

    【讨论】:

      【解决方案2】:

      您可以在单击小部件时启动AlertDialog

      更新:

      为 onclick 监听器添加以下代码。

          AlertDialog.Builder dialog = new AlertDialog.Builder(context);
          dialog.setMessage("Message");
          dialog.show();
      

      【讨论】:

      • 我正在尝试,但失败了,您有代码或示例链接吗?谢谢。我一直在搞乱在AppWidgetProvideronUpdate 方法中设置的未决意图,如果我的点击有某种效果,我已经准备好基本的AlertDialog
      • 请检查更新的答案。您可以根据自己的要求进行修改。
      • android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application。所以不行。投了反对票。
      猜你喜欢
      • 2011-12-31
      • 2020-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-21
      • 1970-01-01
      相关资源
      最近更新 更多