基本的に私のウィジェットはLogCatに従って更新され、ウィジェットのレイアウトのTextViewは更新されません。最初に起動するときに更新されますが、私がしようとしているのは、BrocastReceiverの後にインテントを使用して人為的に更新することです。インテントは正常に動作し、onUpdateはonReceiveの後に実行されますが、テキストは更新されません。私は、別のコンテキスト、AppWidgetManager、またはappWidgetIdsが使用されているという事実と関係があると感じています。ここでウィジェットが更新されていないビュー
は私のメソッドです:
String sent = "0";
@Override
public void onReceive(Context context, Intent intent){
String action = intent.getAction();
if(action != null && action.equals("27")){
Log.i("Updating", "UPDATING WIDGET");
sent = intent.getStringExtra("Sent");
onUpdate(context,AppWidgetManager.getInstance(context),
new int[]{0});
}
super.onReceive(context, intent);
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds){
Log.i("Widget","onUpdate");
String begin = "Sent ";
String end = " Texts Since Last Visit";
final int N = appWidgetIds.length;
for(int i = 0 ; i < N; i++){
int widgetId = appWidgetIds[i];
Intent intent = new Intent(context,History.class);
PendingIntent pi = PendingIntent.getActivity(context, 0, intent, 0);
RemoteViews views = new RemoteViews(context.getPackageName(),
R.layout.widget_layout);
views.setOnClickPendingIntent(R.id.LLwidget, pi);
Log.i("Widget","Sent: " + sent);
views.setTextViewText(R.id.SentTextView, begin + sent + end);
appWidgetManager.updateAppWidget(widgetId, views);
}
}
マニフェスト:
<receiver android:name="MyWidgetProvider">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/widget_info"/>
</receiver>
widget_info:
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider
xmlns:android="http://schemas.android.com/apk/res/android"
android:updatePeriodMillis="30000"
android:initialLayout="@layout/widget_layout"
android:minHeight="72dip"
android:minWidth="146dip">
</appwidget-provider>
私はそれは私が意図することを確かに知って考えると、すべての必要な情報だと思いますonUpdateが動作します。
これは私がウィジェットで初めて試みたものであり、私の脳はこれ以上の睡眠不足のために少し悩まされているので、誰かが助けてくれることを願っています。 ありがとう、 ブランドン
ありがとう、私は考えましたが、これを修正する方法はわかりませんでした。この情報をうまく使うと結論に至ることができます – Brandon
コンポーネント名とAppWidgetManagerのインスタンスを使用してAppWidgetIdsを取得することで問題を解決しました 'provider = new ComponentName(context、MyWidgetProvider.class); ' ' AppWidgetManager.getInstance(context) .getAppWidgetIds(プロバイダ); ' – Brandon