0

当我在活动中更改一些数据时,我试图在 appwidget 中手动更新我的 ListView,当我第一次在手机上安装应用程序时,我可以成功地做到这一点。但是在我离开应用程序并再次重新输入后,我无法更新我的远程视图。

我调用 AppWidgetUpdater 来帮助我更新远程视图:

AppWidgetUpdater appWidgetUpdater = new AppWidgetUpdater(context);
appWidgetUpdater.updateAppWidget();

应用小部件更新器:

public void updateAppWidget(){
    ComponentName appWidget = new ComponentName(context, SimpleTODOAppWidgetProvider.class);
    AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
    int[] appWidgetIds = appWidgetManager.getAppWidgetIds(appWidget);

    Intent intent = new Intent(context, SimpleTODOAppWidgetProvider.class);
    intent.setAction("android.appwidget.action.APPWIDGET_UPDATE");

    intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS,appWidgetIds);
    context.sendBroadcast(intent);
}

应用小部件提供者:

public class SimpleTODOAppWidgetProvider extends AppWidgetProvider {

private Context context;
private AppWidgetManager appWidgetManager;
private int[] appWidgetIds;

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    super.onUpdate(context, appWidgetManager, appWidgetIds);
    final int N = appWidgetIds.length;
    for (int i=0; i<N; i++) {       
        RemoteViews remoteViews = updateWidgetListView(context,
                appWidgetIds[i]);
        appWidgetManager.updateAppWidget(appWidgetIds[i], remoteViews);
        Log.d("TEST", appWidgetIds.toString() + " from provider");
    }   

}

@SuppressWarnings("deprecation")
private RemoteViews updateWidgetListView(Context context, int appWidgetId) {

    RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.appwidget_main);
    Intent svcIntent = new Intent(context, ListViewAdaptorService.class);
    svcIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
    svcIntent.setData(Uri.parse(svcIntent.toUri(Intent.URI_INTENT_SCHEME)));
    remoteViews.setRemoteAdapter(appWidgetId, R.id.appwidget_listview,
            svcIntent);
    remoteViews.setEmptyView(R.id.appwidget_listview, R.id.appwidget_addbutton);

    return remoteViews;
}

}

4

1 回答 1

0

最后我找到了问题所在。我应该使用:

appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetIds[i], R.id.appwidget_listview);

代替:

appWidgetManager.updateAppWidget(appWidgetIds[i], remoteViews);

更新我的 ListView。在 AppWidget 中使用 Adapter 之前,我应该做一些工作来熟悉 ListViewAdaptor...

于 2013-08-18T14:50:18.150 回答