如何使我的Android小部件等到我获取内容

时间:2013-03-01 17:55:06

标签: android android-widget android-appwidget

我正在开发一个从我的api中获取内容的Android小部件。

我现在使用的是一个自定义函数,它使用onUpdate =>中包含的回调函数。 api.getLastItems(myCallBack函数)。

MyWidget提供商:

public void onUpdate(Context _context, AppWidgetManager _appWidgetManager,int[] _appWidgetIds) {

  api.getLastItems(new requestCallback() {

     @Override
     public void onFinish(Object object) {
        ArrayList<String> announcs_titles   = (ArrayList<String>)object;
        final int N = widgetId.length;
        for (int i = 0; i < N; i++) {
           Intent myIntent = new Intent(context, WidgetService.class);
           myIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,widgetId[i]);
           myIntent.putStringArrayListExtra("itemsTitles",items_titles);
           ...
           appWidgetManager.updateAppWidget(widgetId[i], widget);
        }
     }

  });

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

因为RemoteViewsService.RemoteViewsFactory使用需要开始工作的特殊函数getViewAt(int position),所以我使用这种结构让我的小部件等到我的ArrayList of Items被填满。

是正确还是有另一种方法?我怎样才能通过clickEvent刷新我的小部件(我的意思是这样做,而不是PendingIntent.getActivity代码)

1 个答案:

答案 0 :(得分:0)

我通过使用自定义函数修复了问题:我在WidgetProvider onReceive()中调用的load()

@Override
public void onReceive(final Context context, Intent intent) {
// Check if nothing is loading and call function load()

}
private void load(){
... 
//1- fetch content from api and set result to a global variable
//2- Call onUpdate(context, appWidgetManager, appWidgetIds);
}
@Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) {
//add condition to check is loading is completed and my global variable contains something.
}

如果有人需要有关此方法的帮助,请与我联系