小部件不更新视图

Posted

技术标签:

【中文标题】小部件不更新视图【英文标题】:Widget Not Updating Views 【发布时间】:2011-10-04 00:53:24 【问题描述】:

因此,根据我的 LogCat,基本上我的 Widget 会更新,而我的 Widget 布局中的 TextView 不会。它在第一次启动时更新,但我想做的是在 BrocastReceiver 之后使用意图人为地更新它。意图工作正常,onUpdate 在 onReceive 之后运行,但文本没有更新。我感觉这与使用了不同的上下文、AppWidgetManager 或 appWidgetIds 的事实有关。

这是我的方法:

String sent = "0";

@Override
public void onReceive(Context context, Intent intent)
    String action = intent.getAction();
    if(action != null && action.equals("27"))
        Log.i("Updating", "UPDATING WIDGET");
        sent = intent.getStringExtra("Sent");
        onUpdate(context,AppWidgetManager.getInstance(context),
                new int[]0);
    
    super.onReceive(context, intent);



@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
        int[] appWidgetIds)
    Log.i("Widget","onUpdate");
    String begin = "Sent ";
    String end = " Texts Since Last Visit";
    final int N = appWidgetIds.length;
    for(int i = 0 ; i < N; i++)
        int widgetId = appWidgetIds[i];

        Intent intent = new Intent(context,History.class);
        PendingIntent pi = PendingIntent.getActivity(context, 0, intent, 0);

        RemoteViews views = new RemoteViews(context.getPackageName(),
                R.layout.widget_layout);

        views.setOnClickPendingIntent(R.id.LLwidget, pi);
        Log.i("Widget","Sent: " + sent);
        views.setTextViewText(R.id.SentTextView, begin + sent + end);
        appWidgetManager.updateAppWidget(widgetId, views);
    

清单:

 <receiver android:name="MyWidgetProvider">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        </intent-filter>
        <meta-data android:name="android.appwidget.provider"
            android:resource="@xml/widget_info"/>
    </receiver>

widget_info:

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider
  xmlns:android="http://schemas.android.com/apk/res/android" 
  android:updatePeriodMillis="30000" 
  android:initialLayout="@layout/widget_layout" 
  android:minHeight="72dip" 
  android:minWidth="146dip">

</appwidget-provider>

考虑到我确信意图有效并且 onUpdate 运行,我认为这是所有必要的信息。

希望有人能帮助我,因为这是我第一次尝试小部件,我的大脑因为睡眠不足而有点疲惫。 谢谢, 布兰登

【问题讨论】:

【参考方案1】:

您将 0 作为应用小部件 ID 传递。这很可能不是有效的应用小部件 ID。要么使用适当的应用小部件 ID(例如,添加一个附加到点击事件的 Intent 的额外 ID),要么使用不采用应用小部件 ID 的 updateAppWidget() 版本。

【讨论】:

好的,谢谢,我想出了但不知道解决这个问题的方法。希望有了这些信息,我可以得出结论 通过使用组件名称和 AppWidgetManager provider = new ComponentName(context,MyWidgetProvider.class); AppWidgetManager.getInstance(context).getAppWidgetIds(provider); 的实例获取 AppWidgetIds 来修复问题

以上是关于小部件不更新视图的主要内容,如果未能解决你的问题,请参考以下文章

如何在不重建所有 RemoteView 的情况下部分更新应用小部件中的视图

更新小部件列表视图

Android 小部件不更新

小部件列表视图未使用 notifyAppWidgetViewDataChanged 进行更新

如何在android中单击按钮时更新小部件的视图?

主屏幕小部件文本视图未更新