0

私はAndroidを初めて使用し、構成アクティビティを使用してウィジェット上のTextViewを更新しています。正常に動作します。ボタンクリックを更新するには、同じテキストビューを更新する必要があります。そのため、インテントを介してウィジェットIDを渡していますが、レシーバー側ではウィジェットIDを受信できないため、テキストビューを更新できませんでした。

Widget_Providerでのインテントの設定

Intent refreshIntent = new Intent(context, refreshWidgetActivity.class);
refreshIntent.setAction(ACTION_WIDGET_REFRESH);
PendingIntent refreshPendingIntent = PendingIntent.getActivity(context, 0, 
refreshIntent, 0);
remoteViews.setOnClickPendingIntent(R.id.button3, refreshPendingIntent);
refreshIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,appWidgetIds[0]);

受信したアクティビティの終了時に、

Intent intent = getIntent();
Bundle extras = intent.getExtras();
if (extras != null) {
mAppWidgetId = extras.getInt(
AppWidgetManager.EXTRA_APPWIDGET_ID, 
AppWidgetManager.INVALID_APPWIDGET_ID);
}

if (mAppWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {
finish();
}

ここでは、ウィジェットIDの代わりに0がエクストラにあります。助けてください。

4

2 に答える 2

0

私はあなたがいくつかの旗を管理しなければならないと思います。

私があなたの問題を正しく理解した場合、あなたはあなたのアクティビティのデータを更新しようとしていて、それを余分に渡しています。

インテントにFLAGを設定しません。また、私はあなたの意図がどこにあり、それがどのように開始されるのか本当にわかりません。ただし、私自身のアプリケーションでの同じ種類の問題については、次のソリューションを使用します。

インテントを2つのフラグで設定しました:

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);

このようにして、私のインテントは新しいタスク(FLAG_ACTIVITY_NEW_TASK)を起動し、それをルート状態(FLAG_ACTIVITY_CLEAR_TOP)にクリアします(理由については、ソースを参照してください)。

次に、PendingIntentが現在のインスタンスをキャンセルするように設定され、起動されたインスタンスが1つだけであることを確認しました(これ以上は必要ないと思います)

PendingIntent pi = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);

このようにして、新しいインテントは新しいタスクを起動し、以前のすべてのデータをクリアして、新しいデータを取得します。保留中のインテントが無駄に複製されることはありません。

私の場合はうまくいくし、あなたの場合もうまくいくはずだと思う。拡張機能を追加できる場合は、教えてください。

ソース:http ://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP

于 2012-07-31T08:55:56.357 に答える
0

putExtra作成する前に電話をかけてみましたPendingIntentか?

このような:

Intent refreshIntent = new Intent(context, refreshWidgetActivity.class);
refreshIntent.setAction(ACTION_WIDGET_REFRESH);
refreshIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,appWidgetIds[0]);
PendingIntent refreshPendingIntent = PendingIntent.getActivity(context, 0, 
refreshIntent, 0);
remoteViews.setOnClickPendingIntent(R.id.button3, refreshPendingIntent);
于 2012-07-31T08:54:55.300 に答える