Widget Listview未使用notifyAppWidgetViewDataChanged进行更新

Div*_*tel 3 android arraylist android-widget android-listview

我是android开发的新手.我正在尝试在我的小部件中加载listview使用Web服务.它的负载完美,但我想根据我的要求动态更新我的列表视图.

这附上我的代码:

 package com.widget;

 import android.appwidget.AppWidgetManager;
 import android.appwidget.AppWidgetProvider;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.content.SharedPreferences;
 import android.net.Uri;
 import android.util.Log;
 import android.widget.RemoteViews;

public class WidgetProvider extends AppWidgetProvider {

public static final String DATA_FETCHED = "com.widget.DATA_FETCHED";

public static String UPDATE_LIST = "UPDATE_LIST";
AppWidgetManager appWidgetManager;
ComponentName currentWidget;

public static Integer randomNumber;
SharedPreferences sharedprefer;

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
        int[] appWidgetIds) {

    final int N = appWidgetIds.length;
    for (int i = 0; i < N; i++) {

        Intent serviceIntent = new Intent(context, RemoteFetchService.class);

        serviceIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
                appWidgetIds[i]);

        context.startService(serviceIntent);
        // appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetIds[i],
        // R.id.listViewWidget);

        RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
                R.layout.widget_layout);



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

    }
    super.onUpdate(context, appWidgetManager, appWidgetIds);
}

@Override
public void onReceive(Context context, Intent intent) {
    super.onReceive(context, intent);

    if (intent.getAction().equals(DATA_FETCHED)) {
        int appWidgetId = intent.getIntExtra(
                AppWidgetManager.EXTRA_APPWIDGET_ID,
                AppWidgetManager.INVALID_APPWIDGET_ID);
        AppWidgetManager appWidgetManager = AppWidgetManager
                .getInstance(context);
        RemoteViews remoteViews = updateWidgetListView(context, appWidgetId);

        appWidgetManager.updateAppWidget(appWidgetId, remoteViews);

        appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetId,
            R.id.listViewWidget);

    } 

}

private RemoteViews updateWidgetListView(Context context, int appWidgetId) {

    RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
            R.layout.widget_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(appWidgetId, R.id.listViewWidget,
            svcIntent);

    remoteViews.setEmptyView(R.id.listViewWidget, R.id.empty_view);

   updateWidget(context, remoteViews);

    return remoteViews;
}

public static void updateWidget(Context context, RemoteViews remoteViews) {
    AppWidgetManager appWidgetManager = AppWidgetManager
            .getInstance(context);
    int appWidgetIds[] = appWidgetManager
            .getAppWidgetIds(new ComponentName(context,
                    WidgetProvider.class));
        appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetIds,
                R.id.listViewWidget);

}
}
Run Code Online (Sandbox Code Playgroud)

len*_*ooh 6

onReceive改变你的

if (intent.getAction().equals(DATA_FETCHED)) {
Run Code Online (Sandbox Code Playgroud)

if (intent.getAction().equals(AppWidgetManager.ACTION_APPWIDGET_UPDATE)) {
Run Code Online (Sandbox Code Playgroud)

它应该工作.

如果仍然无效,请将以上内容替换为if:

AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
ComponentName thisAppWidget = new ComponentName(context.getPackageName(), Your_Widget_Class_Here.class.getName());
int[] appWidgetIds = appWidgetManager.getAppWidgetIds(thisAppWidget);
appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetIds,R.id.listView);
Run Code Online (Sandbox Code Playgroud)