2

首选项.java

            Intent resultValue = new Intent();
            resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
            setResult(RESULT_OK, resultValue);

            Context context = getApplicationContext();

            RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.main);
            Intent configIntent = new Intent(context, Prefs.class);
            configIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);

            PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, configIntent, 
                                                            PendingIntent.FLAG_UPDATE_CURRENT);

            views.setOnClickPendingIntent(R.id.callbackwidget, pendingIntent);

            AppWidgetManager.getInstance(context).updateAppWidget(appWidgetId, views);

小部件.xml

问题是当我添加小部件时它不可点击。重启手机后就正常了。同样在部署新的构建版本后,小部件是可点击的

有任何想法吗?

4

2 回答 2

2

伟大的。问题在于未发送ACTION_APPWIDGET_UPDATE。所以在关闭首选项之前我发送广播:

Intent updateIntent = new Intent(this, CallBackWidget.class);
updateIntent.setAction("PreferencesUpdated");
updateIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
sendBroadcast(updateIntent);

在小部件的 onreceive 方法中,我检查广播

if ("PreferencesUpdated".equals(action)) {
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
int appWidgetId = intent.getExtras().getInt(AppWidgetManager.EXTRA_APPWIDGET_ID);
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.main);
appWidgetManager.updateAppWidget(appWidgetId, views);
int[] appWidgetIds = new int[] {appWidgetId};
onUpdate(context, appWidgetManager, appWidgetIds);
        }           

现在它就像一个魅力;)

于 2011-03-19T17:19:18.533 回答
1

可能是您为小部件设置了配置屏幕。如果是这样,那么第一次添加小部件时不会为您构建。很难从提供的代码中分辨出来。

请参阅http://developer.android.com/guide/topics/appwidgets/index.html。具体这句话

创建 App Widget 时不会调用 onUpdate() 方法(启动配置 Activity 时系统不会发送 ACTION_APPWIDGET_UPDATE 广播)。首次创建 App Widget 时,配置 Activity 负责向 AppWidgetManager 请求更新。然而,onUpdate() 将被调用以进行后续更新——它只是在第一次被跳过。

于 2011-03-18T15:08:41.697 回答