当我从某些 Activity 更新小部件时,列表远程 View 没有更新(我的意思是刷新自身)。它出现直到应用程序小部件的更新(显示日志)。但不会进入 ListView 的适配器以使用新数据对其进行膨胀。
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);
}
最佳答案
所以终于完成了,再次感谢 developer.android.com。您需要做的就是,从您要处理“更新”的地方触发一个广播 Intent 。
Intent initialUpdateIntent = new Intent(
AppWidgetManager.ACTION_APPWIDGET_UPDATE);
initialUpdateIntent
.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
sendBroadcast(initialUpdateIntent);
然后在 Appwidget 的 onRecieve 中捕获它,并使用
更新 Remoteview notifyAppWidgetViewDataChanged().
类似于下面的代码 fragment
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 :");
}
关于Android appwidget remoteviews 不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18119925/