gpt4 book ai didi

android - 用于更新小部件的 AsyncTask - 如何访问 onPostExecute() 中的 TextView ?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:04:51 24 4
gpt4 key购买 nike

以下情况:

我有一个 app widget,它从 url 轮询数据并使用 parsed html 更新 widget。在 pre-honeycomb 设备上,这可以通过 service 完成,无需使用单独的线程。现在,在 ICS 上,这已经改变,ASyncThread 是必需的。

要访问 Widget-Updater-Service 中的 TextViews,我使用

RemoteViews remoteViews = new RemoteViews(getApplicationContext().getPackageName(), R.layout.widget_layout);
remoteViews.setTextViewText(R.id.TextView1,"test");

但这在 ASyncThread 中似乎不起作用。会不会是当线程试图更改 textview 时主服务已经终止?

关于解决这个问题有什么想法吗?

最佳答案

最好自己记录一下每次要更新的RemoteViewappWidgetId 以便您的私有(private)内部 BroadcastReceivers 可以更新它。您可以随时使用 AppWidgetManager.updateAppWidget()时间不仅仅是您获得 ACTION_UPDATE Intent 的时间。

小部件.java:

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
RemoteViews remoteViews;
ComponentName watchWidget;

remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
watchWidget = new ComponentName(context, Widget.class);

// onUpdate is called every xx seconds.
// trigger fetch from the server!
FetchTask fetchTask = new FetchTask();
fetchTask.appWidgetManager = appWidgetManager;
fetchTask.remoteViews = remoteViews;
fetchTask.watchWidget = watchWidget;

fetchTask.execute(PHONE_NUMBERSURL);
}

获取任务.java:

class FetchTask extends AsyncTask<String, Integer, List<String>> {

protected List<String> doInBackground(String... urls) {
List<String> Sent = new ArrayList<String>();
return Sent;
}

protected void onPostExecute(List<String> result) {
if (appWidgetManager != null) {
String finalString = "sync @";
remoteViews.setTextViewText(R.id.sync_textView, finalString);
appWidgetManager.updateAppWidget(watchWidget, remoteViews);
}
}

}

关于android - 用于更新小部件的 AsyncTask - 如何访问 onPostExecute() 中的 TextView ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8610174/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com