【发布时间】:2011-02-24 06:12:21
【问题描述】:
是否可以在小部件点击时启动一个对话框,或者我必须在小部件点击时启动一个 Activity,然后是一个对话框?
【问题讨论】:
标签: android
是否可以在小部件点击时启动一个对话框,或者我必须在小部件点击时启动一个 Activity,然后是一个对话框?
【问题讨论】:
标签: android
我相信你已经解决了这个问题,但我还是会写在这里,以防像我这样的其他人得到这个答案。
要通过单击小部件来启动对话框,您可以定义一个样式类似于对话框的活动,并在小部件被单击时启动它。
首先在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 answer 和the Android documentation。
希望我能帮上忙:)
【讨论】:
您可以在单击小部件时启动AlertDialog。
更新:
为 onclick 监听器添加以下代码。
AlertDialog.Builder dialog = new AlertDialog.Builder(context);
dialog.setMessage("Message");
dialog.show();
【讨论】:
AppWidgetProvider 的onUpdate 方法中设置的未决意图,如果我的点击有某种效果,我已经准备好基本的AlertDialog。
android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application。所以不行。投了反对票。