Я искал ответ в течение нескольких часов, и, наконец, я понял это. В вашем AppWidgetProvider, в onUpdate, цикл в ваших виджетах и для каждого виджета создайте Intent (добавьте к нему идентификатор виджета и некоторые данные, чтобы сделать его уникальным, например uris намерения), затем создайте PendingIntent и назначьте его представление, в котором вы хотите создать прослушиватель кликов.
for(int i = 0; i<appWidgetIds.length; i++) {
Intent serviceIntent = new Intent(context, MyService.class);
serviceIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
serviceIntent.setData(Uri.parse(serviceIntent.toUri(Intent.URI_INTENT_SCHEME)));
PendingIntent pendingServiceIntent = PendingIntent.getService(context, 0, serviceIntent, PendingIntent.FLAG_UPDATE_CURRENT);
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
views.setOnClickPendingIntent(R.id.refresh, pendingServiceIntent);
context.startService(serviceIntent);
appWidgetManager.updateAppWidget(appWidgetIds[i], views);
}
В моем конкретном случае я имел два щелчка слушателя, один для обновления и один, чтобы начать деятельность настроек, так что если вы хотите, чтобы начать активность просто использовать PendingIntent.getActivity и добавить флаг Intent.FLAG_ACTIVITY_NEW_TASK.
две комбинированные:
for(int i = 0; i<appWidgetIds.length; i++) {
Intent serviceIntent = new Intent(context, MyService.class);
serviceIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
serviceIntent.setData(Uri.parse(serviceIntent.toUri(Intent.URI_INTENT_SCHEME)));
PendingIntent pendingServiceIntent = PendingIntent.getService(context, 0, serviceIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Intent settingsIntent = new Intent(context, SettingsActivity.class);
settingsIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
settingsIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
settingsIntent.setData(Uri.parse(settingsIntent.toUri(Intent.URI_INTENT_SCHEME)));
PendingIntent pendingSettingsIntent = PendingIntent.getActivity(context, 0, settingsIntent, PendingIntent.FLAG_UPDATE_CURRENT);
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
views.setOnClickPendingIntent(R.id.title, pendingSettingsIntent);
views.setOnClickPendingIntent(R.id.refresh, pendingServiceIntent);
context.startService(serviceIntent);
appWidgetManager.updateAppWidget(appWidgetIds[i], views);
}
Надеется, что это поможет кому-то. :)
Я попробовал это, но он по-прежнему не обновляет список :(вот мой http://stackoverflow.com/questions/39388686/how-to-refresh-widget-listview-when-button-refresh-is-clicked/39389295 # 39389295 – natsumiyu