2017-04-02 58 views
0

遺憾的問題這是許多時間回答,但對我來說仍然是現在的工作:-(Android小工具如異步任務

我有以下activiy代碼:

public class WidgetProvider extends AppWidgetProvider { 

@Override 
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
    final int count = appWidgetIds.length; 

    for (int i = 0; i < count; i++) { 
     int widgetId = appWidgetIds[i]; 

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

     Intent intent = new Intent(context, SimpleWidgetProvider.class); 
     intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE); 
     intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 
       0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
     new Weather(remoteViews).execute(); 
     remoteViews.setOnClickPendingIntent(R.id.actionButton, pendingIntent); 
     appWidgetManager.updateAppWidget(widgetId, remoteViews); 
    } 
} 

}

與異步天氣類但這是行不通的。值在remoteViews失蹤。

class Weather extends AsyncTask<Void, String, String> { 

private RemoteViews remoteViews ; 

public Weather(RemoteViews remoteViews) { 
    this.remoteViews = remoteViews; 
} 

@Override 
protected String doInBackground(Void... arg0) { 
    return "COLD"; 
} 

@Override 
protected void onPostExecute(String temp) { 
    remoteViews.setTextViewText(R.id.textView, temp); 
} 

回答

1

無論您傳遞給updateAppWidget()的將在當時使用。在你的情況下,你的Weather任務甚至不會使用開始RemoteViews已被使用的時間,因此你對RemoteViews的更改將毫無意義。

相反:

  • 切換到Thread,因爲在這裏使用AsyncTask沒有價值,並且

  • 做的所有工作特定小ID,包括調用updateAppWidget(),在Thread