2016-02-08 28 views
2

我有一个Android Widget使用RemoteViewsFactory为了填充ListView。如何通知Android Widget重绘

我的数据源是一个可以随时完成的异步JSON调用(它不是推送通知)。眼下代码位于onDataChanged,看起来像这样:

@Override 
public void onDataSetChanged() { 

    // Subsequent calls to get the data. 
    // Called when the widget onReceive ACTION_APPWIDGET_UPDATE procs. 
    newsGetter.updateListFeed(null, new NewsGetter.OnUpdateListFeedFinishedListener() { 
     @Override 
     public void onUpdateListFeedFinished(VolleyError error) { 
      //called when async call has finished. not sure what to call here? 
     } 
    }); 

    Log.e(TAG, "******************************** onDataSetChanged PROVIDER"); 
} 

每隔一小时(我已经设置updatePeriodMillis以每小时更新一次)我AppWidgetProvider得到一个onReceive电话询问的更新(ACTION_APPWIDGET_UPDATE),因此我上面的代码运行。但是,在我的代码运行并更新feedItems后,即使滚动,UI也不会更新。

所以我的问题是:我如何使UI失效并告诉它重绘所有视图?

到目前为止,我已经试过:

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

但是,这也要求onDataChanged这将导致一个无限循环,所以我不能使用。

+0

你试过'invalidateViews();' –

+0

@MustansarSaeed这只会在ListView上可用。我使用的是RemoteViewsFactory,这意味着它是一个RemoteView,不存在这样的调用。 – automaton

+0

答案是使用LocalBroadcastManager来做到这一点,请参阅http://stackoverflow.com/questions/35263508/android-onreceive-not-called – automaton

回答