小部件不更新视图
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()
版本。
【讨论】:
好的,谢谢,我想出了但不知道解决这个问题的方法。希望有了这些信息,我可以得出结论 通过使用组件名称和 AppWidgetManagerprovider = new ComponentName(context,MyWidgetProvider.class);
AppWidgetManager.getInstance(context).getAppWidgetIds(provider);
的实例获取 AppWidgetIds 来修复问题以上是关于小部件不更新视图的主要内容,如果未能解决你的问题,请参考以下文章
如何在不重建所有 RemoteView 的情况下部分更新应用小部件中的视图