假设我有一个app-widget,其中包含一个堆栈视图和四个按钮。
我想通过点击这四个按钮中的每一个来将不同的数据加载到堆栈视图中。
我知道的事情:
我知道如何通过从URL中提取数据来填充app-widget中的堆栈视图。
我知道如何在onUpdate中调用一个intent来调用RemoteViewsService并填充stack-view:
Intent intentNews = new Intent(context, StackWidgetService.class);
intentNews.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
intentNews.setData(Uri.parse(intentNews.toUri(Intent.URI_INTENT_SCHEME)));
remoteViews.setRemoteAdapter(appWidgetIds[i], R.id.svShowContentOfApp, intentNews);
我想做什么:
如何为每个按钮实现onClick以调用不同的RemoteViewsService并将不同的内容加载到我的堆栈视图中。
修改
我做了一些进步:
我弄清楚如何使用这段代码点击一个按钮:
Intent intentClick = new Intent(context, getClass());
intentClick.setAction(ACTION);
PendingIntent PIClick = PendingIntent.getBroadcast(context, 0, intentClick, 0);
remoteViews.setOnClickPendingIntent(R.id.imageView, PIClick);
在onReceive中我可以像这样调用RemoteViewsService:
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.total_app_widget);
if (ACTION.equals(intent.getAction())) {
//>>> for loading a data into stack-view
Intent intentNews = new Intent(context, StackWidgetServiceNews.class);
intentNews.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIdNews);
intentNews.setData(Uri.parse(intentNews.toUri(Intent.URI_INTENT_SCHEME)));
views.setRemoteAdapter(appWidgetIdNews, R.id.svShowContentOfApp, intentNews);
// -------------------------------------- loading a data into stack-view
ComponentName widget = new ComponentName(context, TotalAppWidget.class);
AppWidgetManager.getInstance(context).updateAppWidget(widget, views);
}
}
当我点击按钮时,stackView会消失并显示空视图。 根据日志,一切正常,但堆栈视图永远不会再显示。看起来像remoteView没有成为更新?