【发布时间】:2017-01-16 06:05:06
【问题描述】:
我正在创建一个带有ListView 的Widget。在ListView 中显示来自Web Service 的结果是可以的。我创建了一个类,它是我的WidgetService,它扩展到RemoteViewsService,在RemoteViewsFactory 上,我调用我的ListViewProvider,它具有Web Service。我添加了一个刷新按钮,单击该按钮将再次调用WidgetService 以创建列表视图。
这是我在WidgetProvider 中的代码
public class WidgetProvider extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
final int N = appWidgetIds.length;
for (int i = 0; i < N; ++i) {
RemoteViews remoteViews = updateWidgetListView(context,
appWidgetIds[i]);
appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetIds[i], R.id.listViewWidget);
appWidgetManager.updateAppWidget(appWidgetIds[i], remoteViews);
}
super.onUpdate(context, appWidgetManager, appWidgetIds);
}
private RemoteViews updateWidgetListView(Context context, int appWidgetId) {
RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
R.layout.widget_layout);
//ListView
Intent svcIntent = new Intent(context, WidgetService.class);
svcIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
svcIntent.setData(Uri.parse(svcIntent.toUri(Intent.URI_INTENT_SCHEME)));
remoteViews.setRemoteAdapter(appWidgetId, R.id.listViewWidget, svcIntent);
remoteViews.setEmptyView(R.id.listViewWidget, R.id.empty_view);
//REFRESH
PendingIntent updatePendingIntent = PendingIntent.getService(context, 0, svcIntent, PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.ivRefreshWidget, updatePendingIntent);
return remoteViews;
}
正如您在刷新部分中看到的,我尝试使用PendingIntent 调用WidgetService,但在测试时它不会刷新列表。
提前感谢您的帮助。
【问题讨论】:
-
我之前已经回答过了 - stackoverflow.com/a/12907825/726863 另外,这里也是 - stackoverflow.com/a/36005649/726863
-
@LalitPoptani 基于链接我应该使用
Service而不是使用RemoteViewsService作为我的WidgetService? -
还有@LalitPoptani 我在我的
WidgetProvider上使用notifyAppWidgetViewDataChanged我应该把它放在别的地方吗?我想在单击按钮时触发刷新。
标签: android listview android-widget