我的主屏widget
与ListView
如何获取点击的当前Item
的数量:
我试过按照以下方式做到这一点:
扩展的现场自定义类
AppWidgetProvider
public void onUpdate(Context ctxt, AppWidgetManager mgr,
int[] appWidgetIds) {
for (int i=0; i<appWidgetIds.length; i++) {
Intent svcIntent=new Intent(ctxt, WidgetService.class);
svcIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
svcIntent.setData(Uri.parse(svcIntent.toUri(Intent.URI_INTENT_SCHEME)));
RemoteViews widget=new RemoteViews(ctxt.getPackageName(),
R.layout.widget);
widget.setRemoteAdapter(appWidgetIds[i], R.id.contacts,
svcIntent);
Intent clickIntent=new Intent(ctxt, AppWidget.class);
clickIntent.setAction(ACTION_WIDGET_REFRESH);
clickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds[i]);
PendingIntent pi=PendingIntent.getBroadcast(ctxt, 0 , clickIntent, PendingIntent.FLAG_UPDATE_CURRENT);
widget.setPendingIntentTemplate(R.id.contacts, pi);
mgr.updateAppWidget(appWidgetIds[i], widget);
}
super.onUpdate(ctxt, mgr, appWidgetIds);
}
@Override
public void onReceive(Context context, Intent intent) {
Log.i("gotcha","receive");
if (intent.getAction().equals(ACTION_WIDGET_REFRESH)) {
Intent callIntent = new Intent(Intent.ACTION_CALL);
Bundle extras = intent.getExtras();
int extrass= -1;
if(extras!=null) {
extrass = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_IDS);
}
Log.i("receive", Integer.toString(extrass) ) ; // Here is I've expected to see Item ID
}
但它没有帮助。我刚看到不同的数字(不是商品ID)
我如何获得它们?
答案 0 :(得分:3)
问题是
PendingIntent pi=PendingIntent.getBroadcast(ctxt, 0 , clickIntent, PendingIntent.FLAG_UPDATE_CURRENT);
因为如果你总是将{0}设为requestCode
,并且标志为FLAG_UPDATE_CURRENT
,则所有列表项都会引用由持续更新的相同PendingIntent
。
所以只要给PendingIntent提供不同的requestCode就可以解决这个问题,请使用
PendingIntent pi=PendingIntent.getBroadcast(ctxt, appWidgetIds[i] , clickIntent, PendingIntent.FLAG_UPDATE_CURRENT)`
代替。
并将OnClickFillIntent设置为adapter.getViewAt()
RemoteViews rv = new RemoteViews(pkg, R.layout.item);
Intent i = new Intent().putExtra("position", position);
rv.setOnClickFillInIntent(R.id.item, i);
然后您可以检索appwidget ID以及列表项位置。
答案 1 :(得分:0)
一旦我认为你得到了我们应该做的事情,请阅读它
在小部件中使用集合(例如ListView,StackView等)时,在单个项目上设置PendingIntents是非常昂贵的,因此是不允许的。相反,此方法应该用于在集合上设置单个PendingIntent模板,并且各个项可以使用setOnClickFillInIntent(int,Intent)区分它们的点击行为。