Android appwidget remoteviews没有更新
Posted
技术标签:
【中文标题】Android appwidget remoteviews没有更新【英文标题】:Android appwidget remoteviews not updating 【发布时间】:2013-08-09 19:20:25 【问题描述】:当我从某个活动更新小部件时,列表远程视图没有更新(我的意思是刷新自身)。它出现在应用小部件的 onUpdate (显示日志)。但不会进入列表视图的适配器以使用新数据对其进行膨胀。
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds)
final int N = appWidgetIds.length;
for (int i = 0; i < N; i++)
int appWidgetId = appWidgetIds[i];
Log.e("called", "onupdate");
RemoteViews views = new RemoteViews(context.getPackageName(),
R.layout.widget_lay);
views.setTextViewText(R.id.textView1,
"Floating Text will be displayed here .. Daily Thoughts");
Intent intent = new Intent(context, RemoteServiceEmin.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
views.setRemoteAdapter(R.id.gridview, intent);
// inflating list remote view
Intent intentlist = new Intent(context, ListInflater.class);
intentlist.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
appWidgetId);
intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
views.setRemoteAdapter(R.id.listview, intentlist);
// setting onclick on gridview
Intent itemClickIntent = new Intent(context, MyWidgetProvider.class);
itemClickIntent.setAction(ITEM_CLICK_ACTION);
itemClickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
appWidgetIds[i]);
PendingIntent itemClickPendingIntent = PendingIntent.getBroadcast(
context, 0, itemClickIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
views.setPendingIntentTemplate(R.id.gridview,
itemClickPendingIntent);
appWidgetManager.updateAppWidget(appWidgetId, views);
super.onUpdate(context, appWidgetManager, appWidgetIds);
【问题讨论】:
【参考方案1】:所以终于完成了,再次感谢 developer.android.com 。您需要做的就是,从您要处理“更新”的位置触发广播意图。
Intent initialUpdateIntent = new Intent(
AppWidgetManager.ACTION_APPWIDGET_UPDATE);
initialUpdateIntent
.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
sendBroadcast(initialUpdateIntent);
然后在 Appwidget 的 onRecieve 中捕获它,并使用
更新 Remoteview notifyAppWidgetViewDataChanged().
类似于coden-pbelow
else if (intent.getAction().equals(
AppWidgetManager.ACTION_APPWIDGET_UPDATE))
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
ComponentName thisAppWidget = new ComponentName(context.getPackageName(), MyWidgetProvider.class.getName());
int[] appWidgetIds = appWidgetManager.getAppWidgetIds(thisAppWidget);
appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetIds, R.id.listviewnew);
Log.e("finally after a whole day", "working :");
【讨论】:
此方法不稳定: 1. AppWidgetProvider接收广播大约需要4秒; 2. 有时,AppWidgetProvider 根本无法接收到广播。请使用***.com/a/7738687/903665中的方法 除此方案外,我在 onDataSetChanged 方法中重复了 onCreate 方法的功能,创建了另一个方法来加载数据并由两个方法共享。以上是关于Android appwidget remoteviews没有更新的主要内容,如果未能解决你的问题,请参考以下文章
Android:具有自定义视图的 AppWidget 不起作用
将 AppWidgets 绑定到 AppWidgetHost - Android
在 appwidget 中调整自定义视图大小的问题,无法确定 android 上的实际大小 appwidget,尤其是在平板电脑上
onUpdate 未在小部件中调用,即使我在 onreceive 中看到 android.appwidget.action.APPWIDGET_UPDATE 意图