Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android小部件列表视图句柄单击_Java_Android_Listview_Android Widget - Fatal编程技术网

Java Android小部件列表视图句柄单击

Java Android小部件列表视图句柄单击,java,android,listview,android-widget,Java,Android,Listview,Android Widget,我已经看到了这个问题的相关问题,但我不明白为什么这对我不起作用 我希望在单击列表项时调用Widget Provider类中的onReceive方法,但什么也没有发生 其中包括一些评论,它们也显示了我一直在尝试的东西 相关代码: 主应用程序布局的ListView定义如下: <ListView android:id="@+id/events_list" style="@android:style/TextAppearance.Small" and

我已经看到了这个问题的相关问题,但我不明白为什么这对我不起作用

我希望在单击列表项时调用Widget Provider类中的onReceive方法,但什么也没有发生

其中包括一些评论,它们也显示了我一直在尝试的东西

相关代码:

主应用程序布局的ListView定义如下:

<ListView
        android:id="@+id/events_list"
        style="@android:style/TextAppearance.Small"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />  
@Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        for (int i = 0; i < appWidgetIds.length; i++) {
            Intent intent = new Intent(context, WidgetService.class);
            intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
            intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
            RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.casus_widget);
            rv.setRemoteAdapter(appWidgetIds[i], R.id.events_list, intent);

            appWidgetManager.updateAppWidget(appWidgetIds[i], rv);
        }

        fetchData(context, appWidgetIds);

        super.onUpdate(context, appWidgetManager, appWidgetIds);

    }
小部件提供程序类具有onUpdate方法:

@Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {

        Log.w("CASUS", "UPDATE function called");


        for (int i = 0; i < appWidgetIds.length; i++) {

            Intent intent = new Intent(context, WidgetService.class);
            intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
            intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
            RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.casus_widget);
            rv.setRemoteAdapter(appWidgetIds[i], R.id.events_list, intent);

            Intent clickIntent=new Intent(context, WidgetService.class);
            clickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
            clickIntent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
            clickIntent.setAction(ITEM_CLICK);

            PendingIntent clickPI = PendingIntent.getActivity(context, 0, clickIntent, PendingIntent.FLAG_UPDATE_CURRENT);
            rv.setPendingIntentTemplate(R.id.events_list, clickPI);
            appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetIds[i],  R.id.events_list); //?

            clickIntent = new Intent(context, CasusWidgetProvider.class);
            clickIntent.setAction(UPDATE_LIST);
            clickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);


            PendingIntent pendingIntentRefresh = PendingIntent.getBroadcast(context, 0, clickIntent, 0);
            rv.setOnClickPendingIntent(R.id.update, pendingIntentRefresh);

            appWidgetManager.updateAppWidget(appWidgetIds[i], rv);
        }

        fetchData(context, appWidgetIds);

        super.onUpdate(context, appWidgetManager, appWidgetIds);

    }

我已经弄明白了。小部件提供程序类中的onUpdate函数被修改为如下所示:

<ListView
        android:id="@+id/events_list"
        style="@android:style/TextAppearance.Small"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />  
@Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        for (int i = 0; i < appWidgetIds.length; i++) {
            Intent intent = new Intent(context, WidgetService.class);
            intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
            intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
            RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.casus_widget);
            rv.setRemoteAdapter(appWidgetIds[i], R.id.events_list, intent);

            appWidgetManager.updateAppWidget(appWidgetIds[i], rv);
        }

        fetchData(context, appWidgetIds);

        super.onUpdate(context, appWidgetManager, appWidgetIds);

    }
已修改以匹配正确的ID:

row.setOnClickFillInIntent(R.id.row_layout, fillInIntent);  
单击处理程序模板在执行HTTP请求的类中设置,基本上:

for (int widgetId : allWidgetIds) {
            RemoteViews remoteViews = new RemoteViews(this.getApplicationContext().getPackageName(), R.layout.casus_widget);


            Intent svcIntent = new Intent(this.getApplicationContext(), WidgetService.class);
            svcIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId);
            svcIntent.putExtra("events", events);
            svcIntent.setData(Uri.parse(svcIntent.toUri(Intent.URI_INTENT_SCHEME)));
            remoteViews.setRemoteAdapter(widgetId, R.id.events_list, svcIntent);


            Intent clickIntent = new Intent(this.getApplicationContext(), CasusWidgetProvider.class);
            clickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, allWidgetIds);
            clickIntent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
            clickIntent.setAction(CasusWidgetProvider.ITEM_CLICK);


            PendingIntent toastPendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 0, clickIntent, PendingIntent.FLAG_UPDATE_CURRENT);
            remoteViews.setPendingIntentTemplate(R.id.events_list, toastPendingIntent);

            appWidgetManager.updateAppWidget(widgetId, remoteViews);

        }
希望这能有所帮助