12

重複の可能性:
方向変更後、ウィジェットのボタンが反応しない

OnReceive メソッドで処理される pendingintent を登録する xml レイアウト内に 1 つの ImageView を持つ appwidget で問題に直面しています。電話の向きを変えるまで、すべて正常に動作します。この時点で、ウィジェットはもう機能しません。画像をクリックしても何も起こりません。この問題はまさにここのものと同じです: ウィジェットの方向変更ボタンが応答しない後

何が問題で、どのように解決できますか? ありがとう。

4

4 に答える 4

9

最終的に、OPのサービスフリーソリューションを再作成することができました。記録の秘訣は次のとおりです。リモートビューを更新するときはいつでも、更新するすべてのものを更新する必要があります。私のアプリはいくつかの視覚要素を更新していましたが、ボタンハンドラーを再度設定していませんでした。これにより、ハンドラーは回転が変更された後にのみ(すぐにではなく)動作を停止し、混乱を招きました。

これが正しく行われていれば、構成変更ブロードキャストをインターセプトする必要はありません。最後に設定したリモートビューは、ローテーション後に再び使用されます。AppWidgetProviderを呼び出す必要はありません。

于 2011-02-24T14:52:32.337 に答える
2

私も同様の問題を抱えていましたが、私のアプリは現在、Alexによって提案された解決策でうまく機能しています

「...サービスの助けを借りずに解決しました。OnReceiveメソッドでsetOnClickPendingIntentを再設定するだけです。」

onReceiveメソッドを追跡しましたが、デバイスの向きを変更するたびに呼び出されるため、onReceiveメソッドでウィジェットの構成を再度呼び出しました。

とにかく、これがその問題を解決するための最良の解決策であるかどうかはわかりません。誰かがより良い解決策を知っている場合は、共有してください。

ありがとう。

于 2012-01-12T22:50:12.650 に答える
1

(アクティビティまたはブロードキャスト レシーバー [アプリ ウィジェット プロバイダー] を使用して) ウィジェットの外観を更新するときはいつでも、クリック ハンドラーのすべての PendingIntents を再割り当てしてから、updateAppWidget()通常どおり呼び出す必要があります。

setTextViewText():

// This will update the Widget, but cause it to
// stop working after an orientation change.
updateWidget()
{
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
remoteViews.setTextViewText(R.id.widget_text_view, "Updated widget");

appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
}


// This is the correct way to update the Widget,
// so that it works after orientation change.
updateWidget()
{
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
remoteViews.setTextViewText(R.id.widget_text_view, "Updated widget");

Intent intent = new Intent(context, MyWidgetActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, ...);
remoteViews.setOnClickPendingIntent(R.id.widget_click_button, pendingIntent);

appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
}
于 2012-03-13T17:22:34.183 に答える
0

考えられる説明、またはさらに試してみることについては、こちらを参照してください。

http://permalink.gmane.org/gmane.comp.handhelds.android.devel/98008

また

http://groups.google.com/group/android-developers/browse_thread/thread/578a4429c369c27c/273a53a96ddd10c5?lnk=gst&q=Widget+does+not+respond+when+phone+orientation+changes#273a53a96ddd10c5

しかし、真の解決策が何であるかはまだ明らかではありません。

于 2011-12-27T17:24:06.363 に答える