Android 多个Widget使用GridView实现子view点击事件如何区分AppWidgetId ?

Android 多个Widget使用GridView实现子view点击事件如何区分AppWidgetId

 void updateAppWidget(Context context, AppWidgetManager appWidgetManager,
                                int appWidgetId) {
        Log.i("ceshi", "updateAppWidget: ...appWidgetId==" + appWidgetId);
        initData();
        CharSequence widgetText = context.getString(R.string.appwidget_text);
        // Construct the RemoteViews object
        views = new RemoteViews(context.getPackageName(), R.layout.huarong_widget);
         /*设置响应 “GridView(gridview)” 的intent模板
         说明:“集合控件(如GridView、ListView、StackView等)”中包含很多子元素,如GridView包含很多格子。
             它们不能像普通的按钮一样通过 setOnClickPendingIntent 设置点击事件,必须先通过两步。
                (01) 通过 setPendingIntentTemplate 设置 “intent模板”,这是比不可少的!
                (02) 然后在处理该“集合控件”的RemoteViewsFactory类的getViewAt()接口中 通过 setOnClickFillInIntent 设置“集合控件的某一项的数据”
          */
        Intent gridIntent = new Intent();
        gridIntent.setAction(COLLECTION_VIEW_ACTION);
        gridIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, gridIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        // 设置intent模板
        views.setPendingIntentTemplate(R.id.grid_photo, pendingIntent);

        Intent serviceIntent = new Intent(context, GridWidgetService.class);//通过GridWidgetService对gridview进行管理
        views.setRemoteAdapter(R.id.grid_photo, serviceIntent);
        Log.i(TAG, "updateAppWidget: serviceIntent==" + serviceIntent);
        // Instruct the widget manager to update the widget
        appWidgetManager.updateAppWidget(appWidgetId, views);
    } void updateAppWidget(Context context, AppWidgetManager appWidgetManager,
                                int appWidgetId) {
        Log.i("ceshi", "updateAppWidget: ...appWidgetId==" + appWidgetId);
        initData();
        CharSequence widgetText = context.getString(R.string.appwidget_text);
        // Construct the RemoteViews object
        views = new RemoteViews(context.getPackageName(), R.layout.huarong_widget);
         /*设置响应 “GridView(gridview)” 的intent模板
         说明:“集合控件(如GridView、ListView、StackView等)”中包含很多子元素,如GridView包含很多格子。
             它们不能像普通的按钮一样通过 setOnClickPendingIntent 设置点击事件,必须先通过两步。
                (01) 通过 setPendingIntentTemplate 设置 “intent模板”,这是比不可少的!
                (02) 然后在处理该“集合控件”的RemoteViewsFactory类的getViewAt()接口中 通过 setOnClickFillInIntent 设置“集合控件的某一项的数据”
          */
        Intent gridIntent = new Intent();
        gridIntent.setAction(COLLECTION_VIEW_ACTION);
        gridIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, gridIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        // 设置intent模板
        views.setPendingIntentTemplate(R.id.grid_photo, pendingIntent);

        Intent serviceIntent = new Intent(context, GridWidgetService.class);//通过GridWidgetService对gridview进行管理
        views.setRemoteAdapter(R.id.grid_photo, serviceIntent);
        Log.i(TAG, "updateAppWidget: serviceIntent==" + serviceIntent);
        // Instruct the widget manager to update the widget
        appWidgetManager.updateAppWidget(appWidgetId, views);
    }
   @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        // There may be multiple widgets active, so update all of them
        for (int appWidgetId : appWidgetIds) {
            updateAppWidget(context, appWidgetManager, appWidgetId);
        }
    }
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i("Ceshi", "onReceive: ...==" + intent.getAction() +"   intent=" + intent);

        super.onReceive(context, intent);
        String action = intent.getAction();
        AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
        if (action.equals(COLLECTION_VIEW_ACTION)) {
//            views = new RemoteViews(context.getPackageName(), R.layout.huarong_widget);
            int appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, -1);
            Log.i(TAG, "onReceive: appWidgetId =" + appWidgetId);
            appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetId,R.id.grid_photo);
            int clickPosition = intent.getIntExtra(COLLECTION_VIEW_EXTRA, -1);

            SharedPreferences sharedPreferences = context.getSharedPreferences("Click", Context.MODE_PRIVATE);
            SharedPreferences.Editor edit = sharedPreferences.edit();
            edit.putInt("click_position", clickPosition);
            edit.commit();

            Log.i(TAG, "onReceive: ====" + clickPosition);
//            int position = intent.getIntExtra(COLLECTION_VIEW_EXTRA, -1);
//            Intent serviceIntent = new Intent(context, GridWidgetService.class);//通过GridWidgetService对gridview进行管理
//            serviceIntent.putExtra("clickPosition", 2);
//            views = new RemoteViews(context.getPackageName(), R.layout.huarong_widget);
//            views.setRemoteAdapter(R.id.grid_photo, serviceIntent);
        }
    }

为何onReceiver当中接收点击事件时,appWidgetId总是为最后一个widget的AppWidgetId?导致我创建多个widget时,无论点击哪一个的GridView的itemView响应的总是最后一个widget.