单击按钮刷新时如何刷新小部件列表视图?

How to refresh widget listview when button refresh is clicked?

我正在创建一个带有 ListViewWidget。在 ListView 中显示 Web Service 的结果是可以的。我创建了一个 class,它是我的 WidgetService,它延伸到 RemoteViewsService,在 RemoteViewsFactory 上,我称我的 ListViewProviderWeb Service。我添加了一个刷新按钮,单击它会再次调用 WidgetService 以创建列表视图。

这是我的 WidgetProvider

中的代码
public class WidgetProvider extends AppWidgetProvider {

   @Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
                     int[] appWidgetIds) {
 final int N = appWidgetIds.length;
  for (int i = 0; i < N; ++i) {
        RemoteViews remoteViews = updateWidgetListView(context,
                appWidgetIds[i]);
        appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetIds[i], R.id.listViewWidget);
        appWidgetManager.updateAppWidget(appWidgetIds[i], remoteViews);
    }
    super.onUpdate(context, appWidgetManager, appWidgetIds);
}

private RemoteViews updateWidgetListView(Context context, int appWidgetId) {

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

//ListView
    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);

    //REFRESH
    PendingIntent updatePendingIntent = PendingIntent.getService(context, 0, svcIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    remoteViews.setOnClickPendingIntent(R.id.ivRefreshWidget, updatePendingIntent);

 return remoteViews;
}

正如您在刷新部分看到的那样,我尝试使用 PendingIntent 来调用 WidgetService 但在测试时它不会刷新列表。 提前感谢您的帮助。

arrayList = new ArrayList<AllPostsProvider>();
arrayList.add(all_contents);
AllPostReCyclerViewAdapter = new AllPostReCyclerViewAdapter(arrayList,getApplicationContext());

点击刷新按钮时

 arrayList.clear();
 arrayList = new ArrayList<AllPostsProvider>();
 arrayList.add(all_contents);
AllPostReCyclerViewAdapter = new AllPostReCyclerViewAdapter(arrayList,getApplicationContext());

在我的 onUpdate 中,我设置了一个要在我的 onReceive 中调用的动作,并将 appWidgetIds 也放在 onReceive

Intent refreshIntent = new Intent(context, WidgetProvider.class);
        refreshIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
        refreshIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);

然后在 onReceive 我调用 onUpdate

if (intent.getAction().equals(AppWidgetManager.ACTION_APPWIDGET_UPDATE)) {
        Bundle extras = intent.getExtras();
        if (extras != null) {
            int[] appWidgetIds = extras.getIntArray(AppWidgetManager.EXTRA_APPWIDGET_IDS);
            if (appWidgetIds != null && appWidgetIds.length > 0) {
                Toast.makeText(context, "REFRESH", Toast.LENGTH_SHORT).show();
                this.onUpdate(context, AppWidgetManager.getInstance(context), appWidgetIds);
            }
        }
    }