2

假设我有一个包含堆栈视图和四个按钮的应用程序小部件。

我想通过单击这四个按钮中的每一个将不同的数据加载到堆栈视图中。

我知道的事情:

我知道如何通过从 URL 获取数据来填充 app-widget 中的堆栈视图。

我知道如何在 onUpdate 中调用一个意图来调用 RemoteViewsService 并填充堆栈视图:

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 消失并显示空视图。根据 Logs 一切正常,但堆栈视图不再显示。看起来 remoteView 没有更新?

4

0 回答 0