私はウィジェットで作業していましたが、いくつかの進歩を遂げていましたが、それでも私が望むことはできません。Androidウィジェットが更新されていない - 間違ったウィジェットIDを持っています
私はokで動作するコンフィギュレータアクティビティを持っています。それが閉じると、私はWordWidgetクラスのupdateAppWidgetメソッドを呼び出し、ウィジェットは乱数を更新します。
私はそれをすることはできませんonClickのために変更する乱数を取得します。ログによると、私はonReceive()メソッドを入力しますが、それについてはそれです。
ログにはウィジェットIDが印刷されています。私はconfiguratorアクティビティから実行するとappWidgetId = 33を表示していますが、ウィジェットを押すとappWidgetId = 24が表示されることに気付きました。
これはコードである:
public class WordWidget extends AppWidgetProvider
{
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds)
{
//This is run when a new widget is added or when the update period expires.
Log.v("wotd", "In onUpdate(), updating " + appWidgetIds.length + " widgets");
Log.v("wotd", " the array is " + appWidgetIds.toString());
for(int x = 0; x < appWidgetIds.length; x++)
{
Integer appWidgetId = appWidgetIds[x];
//Method that updates the random value
updateAppWidget(context, appWidgetManager, appWidgetId);
}
}
@Override
public void onReceive(Context context, Intent intent)
{
super.onReceive(context, intent);
Log.v("wotd", "In onReceive() with intent=" + intent.toString());
if (intent.getAction().equals("android.appwidget.action.APPWIDGET_UPDATE"))
{
Integer mAppWidgetId;
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
Bundle extras = intent.getExtras();
if(extras != null)
{
Log.v("wotd", "In onReceive(), extras is valid");
mAppWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
//If they gave us an intent without a valid widget Id, just bail.
if (mAppWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID)
{
Log.v("wotd", "In onReceive(), mAppWidgetId is ok");
updateAppWidget(context, appWidgetManager, mAppWidgetId);
}
} else
{
Log.v("wotd", "In onReceive(), extras is INVALID");
mAppWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID;
}
}
}
static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, Integer appWidgetId)
{
Log.v("wotd", "In updateAppWidget() with appWidgetId=" + appWidgetId);
//Setup onClick
Intent widgetIntent = new Intent(context, WordWidget.class);
widgetIntent.setAction("android.appwidget.action.APPWIDGET_UPDATE");
widgetIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
PendingIntent widgetPendingIntent = PendingIntent.getBroadcast(context, 0, widgetIntent, 0);
Integer nextNumb = new Random().nextInt(100);
Log.v("wotd", "In updateAppWidget(), nextNumb = " + nextNumb.toString());
RemoteViews remoteView = new RemoteViews(context.getPackageName(), R.layout.widgetlayout);
remoteView.setTextViewText(R.id.mainText, String.valueOf(nextNumb));
remoteView.setOnClickPendingIntent(R.id.mainText, widgetPendingIntent);
// Tell the widget manager
appWidgetManager.updateAppWidget(appWidgetId, remoteView);
}
}
これは、ログ・ファイルで、私は、ウィジェットが(環境設定の活性はまた、ログプリントアウトを有し、このことは、異なる数としてウィジェットIDを示すことに注意タッチしてから):
05-14 17:15:47.453: V/wotd(1585): In onReceive() with intent=Intent { act=android.appwidget.action.APPWIDGET_UPDATE flg=0x10000000 cmp=com.rfxlabs.wordofthedaywidget/.WordWidget bnds=[202,177][222,201] (has extras) }
05-14 17:15:47.453: V/wotd(1585): In onReceive(), extras is valid
05-14 17:15:47.463: V/wotd(1585): In onReceive(), mAppWidgetId is ok
05-14 17:15:47.463: V/wotd(1585): In updateAppWidget() with appWidgetId=24
5月14日17:15:47.463:V/wotd(1585):あなたが見ることができるようupdateAppWidgetで()、= 42
nextNumbだから、私は実際に私のupdateAppWidgetに入っています方法、しかし何らかの理由でappWidgetIdが間違っています。
これは何が起こっているのですか?どうもありがとう!あなたの関数で
あなたがウィジェットcickまたは別の何かにウィジェット更新したい問題が何でありますか? –
はい、ウィジェットに触れるたびに乱数を変更します。 – Sandy
少し違いがある同じコードの2つのコピーはありませんか? – Ronnie