我有以下代码.我试图在我的主屏幕上放置2个小部件实例.
这是在放置2个小部件实例后打印的日志.
onUpdate START
onUpdate 170
onUpdate START
onUpdate 171
Run Code Online (Sandbox Code Playgroud)
当我点击第一个小部件,然后点击第二个小部件时,我预计将分别打印170和171.但是,这就是我得到的.
onReceive 171 <-- I'm expecting 170 to be printed.
onReceive 171
Run Code Online (Sandbox Code Playgroud)
我的代码有什么问题吗?或者,我的期望错了?
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";
}
Run Code Online (Sandbox Code Playgroud)
这是因为您的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)));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
609 次 |
| 最近记录: |