从按钮点击更新Android小部件

6

我有一个小部件,可以显示数据库中的一些信息。该小部件每小时会定期更新一次。但是我还允许用户通过单击小部件上的刷新按钮手动更新它。如何执行点击操作并刷新小部件?

注意:该小部件使用服务来执行操作。

谢谢提前。

2个回答

1
我已经寻找答案数小时,最终找到了解决方法。在你的AppWidgetProvider中的onUpdate方法中,循环遍历你的小部件,对于每个小部件,创建一个Intent(添加小部件id和一些数据使其唯一,如intent uri),然后创建一个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

0

我认为当用户点击“刷新按钮”时,您需要重新加载您的小部件视图

//for refresh button
Intent refresh = new Intent(ctxt, WatchWidget_Honeycomb.class);
PendingIntent refreshIntent = PendingIntent.getBroadcast(ctxt, 0, refresh, 0);
widget.setOnClickPendingIntent(R.id.btn_Refresh, refreshIntent); 
appWidgetManager.updateAppWidget(new ComponentName(ctxt,WatchWidget_Honeycomb.class), widget);

如果您遇到任何问题,请留下评论。
编程愉快。

这个应该放在 onUpdate() 中吗? - natsumiyu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接