![](/img/trans.png)
[英]onUpdate not being called in widget, even though I see the android.appwidget.action.APPWIDGET_UPDATE intent in onreceive
[英]onReceive will always receive the last appWidgetId, even different instance widget is being pressed
我有以下代碼。 我試圖在主屏幕上放置2個小部件實例。
這是放置2個小部件實例后正在打印的日志。
onUpdate START
onUpdate 170
onUpdate START
onUpdate 171
當我單擊第一個窗口小部件,然后單擊第二個窗口小部件時,我預計將分別打印170和171。 但是,這就是我得到的。
onReceive 171 <-- I'm expecting 170 to be printed.
onReceive 171
我的代碼有什么問題嗎? 還是我有錯誤的期望?
public class MyAppWidgetProvider extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
Log.i("CHEOK", "onUpdate START");
for (int appWidgetId : appWidgetIds) {
Log.i("CHEOK", "onUpdate " + appWidgetId);
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout_inverse_holo_light);
// Register an onClickListener
Intent refreshIntent = new Intent(context, JStockAppWidgetProvider.class);
refreshIntent.setAction(REFRESH_ACTION);
refreshIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
PendingIntent refreshPendingIntent = PendingIntent.getBroadcast(context, 0, refreshIntent, PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.refresh_button, refreshPendingIntent);
appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
}
}
@Override
public void onReceive(Context context, Intent intent) {
AppWidgetManager mgr = AppWidgetManager.getInstance(context);
if (intent.getAction().equals(REFRESH_ACTION)) {
int appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
Log.i("CHEOK", "onReceive " + appWidgetId);
// How can I access my remoteView?
// During onUpdate, is saving all the remoteViews in local member
// Map<appWidgetId, remoteView> a good idea?
}
super.onReceive(context, intent);
}
private static final String REFRESH_ACTION = "org.yccheok.jstock.gui.widget.MyAppWidgetProvider.REFRESH_ACTION";
}
這是因為兩個PendingIntent的處理方式相同,因此創建第二個將替換第一個,請參閱: http : //developer.android.com/reference/android/content/Intent.html#filterEquals%28android.content .Intent%29
確定兩個意圖是否出於意圖解析(過濾)的目的相同。 也就是說,如果它們的動作,數據,類型,類和類別相同。 這不會比較意圖中包含的任何其他數據。
因此,您的僅與Extra有所不同,這是行不通的。 嘗試使用setData進行設置。
refreshIntent.setData(Uri.parse(refreshIntent.toUri(Intent.URI_INTENT_SCHEME)));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.