使用应用程序更新 ListView 小部件
Posted
技术标签:
【中文标题】使用应用程序更新 ListView 小部件【英文标题】:Update ListView Widget with Application 【发布时间】:2015-05-10 13:51:55 【问题描述】:当我尝试从我的应用程序更新内容时,我的应用程序小部件出现问题。我的小部件包含一个列表视图。
listview 工作正常,每 30 分钟更新一次,但是当我在应用程序中进行更改时,我还需要更新它。这是我的代码:
public class WidgetListProvider extends AppWidgetProvider
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds)
final int N = appWidgetIds.length;
ComponentName component;
for (int i = 0; i < N; ++i)
RemoteViews remoteViews = updateWidgetListView(context,
appWidgetIds[i]);
appWidgetManager.updateAppWidget(appWidgetIds[i], remoteViews);
component=new ComponentName(context,WidgetListProvider.class);
appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetIds, R.id.listViewWidget);
appWidgetManager.updateAppWidget(component, remoteViews);
super.onUpdate(context, appWidgetManager, appWidgetIds);
private RemoteViews updateWidgetListView(Context context, int appWidgetId)
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_list_layout);
Intent svcIntent = new Intent(context, WidgetService.class);
svcIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
svcIntent.setData(Uri.parse(svcIntent.toUri(Intent.URI_INTENT_SCHEME)));
remoteViews.setRemoteAdapter(R.id.listViewWidget, svcIntent);
remoteViews.setEmptyView(R.id.listViewWidget, R.id.empty_view);
return remoteViews;
【问题讨论】:
列表更新后是否调用 notifyDataSetChanged()? 【参考方案1】:将此代码放入您要更新内容的应用程序中。
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
int appWidgetIds[] = appWidgetManager.getAppWidgetIds(new ComponentName(context, WidgetListProvider.class));
appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetIds, R.id.listViewWidget);
【讨论】:
【参考方案2】:当我在应用程序中进行更改时,我还需要更新它
您可以随时通过静态getInstance()
方法获取AppWidgetManager
。只要您跟踪需要更新的应用小部件 ID,当您的应用中的其他工作需要更新您的应用小部件内容时,您就可以在很大程度上检查现有代码。
【讨论】:
以上是关于使用应用程序更新 ListView 小部件的主要内容,如果未能解决你的问题,请参考以下文章
带有 ListView 的 Android 小部件无法正确加载项目
Android:使用 ListView 和 Service 从应用小部件开始活动
带有集合(ListView)的Android小部件不显示项目