【问题标题】:partiallyUpdateAppWidget on RemoteViews not workingRemoteViews 上的 partialUpdateAppWidget 不起作用
【发布时间】:2017-09-19 16:28:15
【问题描述】:

RemoteViews 中,AppWidget 我有一个AdapterViewFlipper,当用户单击AppWidget 中的按钮时,它应该会翻转。根据官方文档,这应该通过在RemoteViews 上调用showNext 来完成。然后应该使用 partiallyUpdateAppWidget 更新 AppWdiget,它甚至在文档中以 showNext() 函数为例。我已经尝试过实现这一点,但我很可能会犯一些我似乎无法弄清楚的愚蠢错误。

public class WidgetProvider extends AppWidgetProvider {

    public static final String NEXT = "next";

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        for (int appWidgetId : appWidgetIds) {
            RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout);

            Intent nextIntent = new Intent(context, WidgetProvider.class);
            nextIntent.setAction(NEXT);
            views.setOnClickPendingIntent(R.id.next_button,
                    PendingIntent.getBroadcast(context, appWidgetId, nextIntent,
                            PendingIntent.FLAG_UPDATE_CURRENT));

            views.setRemoteAdapter(R.id.view_flipper, new Intent(context,
                    WidgetRemoteViewService.class));

            appWidgetManager.updateAppWidget(appWidgetId, views);
        }
        super.onUpdate(context, appWidgetManager, appWidgetIds);
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        if(intent.getAction().equals(NEXT)) {
            RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
                    R.layout.widget_layout);
            remoteViews.showNext(R.id.view_flipper);
            AppWidgetManager.getInstance(context).partiallyUpdateAppWidget(
                    AppWidgetManager.getInstance(context).getAppWidgetIds(
                            new ComponentName(context, WidgetProvider.class)),
                            remoteViews);
        }
        super.onReceive(context, intent);
    }
}

当用updateAppWidget 替换partiallyUpdateAppWidget 时,下一个按钮会一直工作,直到方向改变或手机进入睡眠状态,这会强制重绘最后存储的RemoteViews。这让我相信我犯的错误与部分更新有关,但我无法弄清楚我做错了什么。

【问题讨论】:

  • 尝试使用partiallyUpdateAppWidget 调用特定的widgetid,看看是否有帮助。在nextIntent 中添加一个带有appwidget id 的额外内容,然后在onReceive 中检索它
  • 我已经尝试过您的建议,但不幸的是,它与一次更新所有小部件存在相同的问题。
  • 您在哪个 API 级别进行测试?也许withpartiallyUpdateAppWidget 的问题与这个未解决的问题issuetracker.google.com/issues/37136552 有关
  • 你是绝对正确的,这个未解决的问题就是问题所在。我在 API 级别 24 上进行测试,我的代码确实在较低的 API 级别上运行良好。感谢您指出这一点,如果您将其作为答案发布,我会接受。

标签: android android-appwidget android-remoteview android-appwidget-list


【解决方案1】:

您在哪个 API 级别进行测试?

也许withpartiallyUpdateAppWidget 的问题与这个未解决的问题issuetracker.google.com/issues/37136552 有关

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-10
    • 2011-12-13
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多