2

prefs.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を参照してください。具体的にはこの文

アプリ ウィジェットの作成時に onUpdate() メソッドは呼び出されません (構成アクティビティが起動されると、システムは ACTION_APPWIDGET_UPDATE ブロードキャストを送信しません)。アプリ ウィジェットが最初に作成されたときに AppWidgetManager からの更新を要求するのは、構成アクティビティの役割です。ただし、onUpdate() は後続の更新のために呼び出されます。スキップされるのは最初の 1 回だけです。

于 2011-03-18T15:08:41.697 に答える