0

我有主widget屏幕ListView

如何获得Item被点击的当前数量:我尝试通过以下方式进行操作:Insite custom class which extends 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)

我怎样才能获得它们?

4

2 回答 2

3

问题是

  PendingIntent pi=PendingIntent.getBroadcast(ctxt, 0 , clickIntent,  PendingIntent.FLAG_UPDATE_CURRENT);

因为如果你总是给 0 作为requestCode,并且标志是FLAG_UPDATE_CURRENT,那么所有列表项都引用相同PendingIntent的内容,由 lasted 更新。

所以只需给 PendingIntent 提供不同的 requestCode 就可以解决这个问题,请使用

PendingIntent pi=PendingIntent.getBroadcast(ctxt,  appWidgetIds[i] , clickIntent,  PendingIntent.FLAG_UPDATE_CURRENT)`

反而。并将 OnClickFillIntent 设置为 RemoteViewadapter.getViewAt()

    RemoteViews rv = new RemoteViews(pkg, R.layout.item);
    Intent i = new Intent().putExtra("position", position);
    rv.setOnClickFillInIntent(R.id.item, i);

然后您可以检索 appwidget id 以及列表项位置。

于 2013-09-03T15:31:09.153 回答
0

读一次我认为你明白我们应该怎么做

在小部件中使用集合(例如 ListView、StackView 等)时,在单个项目上设置 PendingIntents 的成本非常高,因此是不允许的。相反,应该使用此方法在集合上设置单个 PendingIntent 模板,并且各个项目可以使用 setOnClickFillInIntent(int, Intent) 区分它们的点击行为。

于 2014-03-08T08:02:45.327 回答