4

ホーム画面に、デフォルトの背景画像を持ついくつかのImageButtonを備えたウィジェットがあります。構成アクティビティを通じて、任意のImageButtonの画像を変更できます。問題は、画面を回転させると、ImageButtonの画像が消えて、デフォルトの画像に戻ることです。

なぜこれが起こるのか、それを修正する方法がわかりません

4

2 に答える 2

10

画面が回転すると、 AppWidgetManager .updateAppWidget()に渡した最後のRemoteViewsオブジェクトを使用して、appwidget全体が再構築されます。したがって、updateAppWidget()を呼び出すたびに、ウィジェットで更新する1つまたは2つのものだけでなく、ウィジェットが完全に再構築された場合に必要なすべてが設定されたRemoteViewsオブジェクトを渡すことが非常に重要です。画面。

したがって、AppWidgetProviderクラスでは、appwidgetを更新するたびに、RemoteViewsオブジェクトを作成し、そのオブジェクトを使用してappwidgetのすべてのビュー設定を構築し、完了したらAppWidgetManager.updateAppWidget()を1回呼び出す必要があります。

私の推測では、あなたはこのようなことをしていると思います:

  • RemoteViewsオブジェクトを取得する
  • 新しいボタンの画像を設定する
  • updateAppWidget()を呼び出す
  • RemoteViewsオブジェクトを取得する
  • ボタンに保留中のインテントを設定します
  • updateAppWidget()を呼び出す

あなたがこのようなことをする必要があるとき:

  • RemoteViewsオブジェクトを取得する
  • 新しいボタンの画像を設定する
  • ボタンに保留中のインテントを設定します
  • updateAppWidget()を呼び出す
于 2010-04-16T14:21:28.343 に答える
1

mbairdの答えはその1つです。
しかし、別の解決策があります。解決策は、ウィジェットのビュー全体を作成/更新する場合はupdateAppWidgetを使用し、ビューの一部のみを変更する場合はpartialupdateAppWidgetを使用することです。その後、ビューはリセットされません。

部分的な更新の例(すべてのウィジェットに小さな同期アイコンを表示):

AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);    
int[] appWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context, Widget.class)); 
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout); 

views.setViewVisibility(R.id.syncImage, View.VISIBLE);

for (int i = 0; i < appWidgetIds.length; i++) {    
    appWidgetManager.partiallyUpdateAppWidget(appWidgetIds[i], views);
}
于 2015-04-16T11:21:21.837 に答える