从AsyncTaskLoader更新UI

问题描述 投票:5回答:5

我已经将我的AsyncTask转换为AsyncTaskLoader(主要是为了处理配置更改)。我有一个TextView用作进度状态,并且正在onProgressUpdate中使用AsyncTask对其进行更新。看起来AsyncTaskLoader不具有等效项,因此在loadInBackground(在AsyncTaskLoader中)期间,我使用的是:

getActivity().runOnUiThread(new Runnable() {
    public void run() {
        ((TextView)getActivity().findViewById(R.id.status)).setText("Updating...");
    }
});

我正在Fragment中使用它,这就是为什么我正在使用getActivity()。这很好用,除非发生配置更改(例如更改屏幕方向)。我的AsyncTaskLoader保持运行状态(这就是为什么我使用AsyncTaskLoader的原因),但是runOnUiThread似乎被跳过了。

不确定为什么要跳过它,或者这是否是从AsyncTaskLoader更新UI的最佳方法。

更新:

我最终恢复为AsyncTask,因为它似乎更适合UI更新。希望他们可以将AsyncTask的有效内容与AsyncTaskLoader合并。

android android-asynctask android-ui asynctaskloader
5个回答
4
投票

实际上是可能的。本质上,您需要对AsyncTaskloader进行子类化并实现publishMessage()方法,该方法将使用Handler将进度消息传递给实现ProgressListener(或您要调用的任何接口)的任何类。 >

下载此示例:http://www.2shared.com/file/VW68yhZ1/SampleTaskProgressDialogFragme.html(如果离线,请通知我)-基于http://habrahabr.ru/post/131560/


4
投票

嗯...你不应该这样做。


1
投票

回答我自己的问题,但据我所知,如果需要更新UI,AsyncTaskLoader不是最好的选择。


0
投票

在实现LoaderManager.LoaderCallback的类(可能是您的Activity)中,有一个onLoadFinished()方法必须重写。这是AsyncTaskLoader完成加载后返回的内容。


0
投票

最好的方法是使用LiveData,100%正常工作

© www.soinside.com 2019 - 2024. All rights reserved.