Асинхронная задача Android - какое действие это вызвало? - PullRequest
0 голосов
/ 26 апреля 2011

Я сталкиваюсь с проблемой наличия одной асинхронной задачи, но мне нужно использовать ее дважды, потому что каждый раз я меняю разные части GUI (обновление индикатора выполнения).

Есть ли способ, как определить в предложении if - else, какое действие он вызывает, а затем создать соответствующую функцию для каждого из них?

Редактировать: да, ответ был здесь, а сейчас нет ...

Спасибо

Ответы [ 2 ]

2 голосов
/ 26 апреля 2011

Вы можете хранить переменную-член, которая содержит действие / контекст, из которого она запущена.

//pseudocode
AsyncTask task = new AsyncTask();
task.mActivity = this;
task.execute();

Внутри doInBackground просто проверьте действие:

//pseudocode
if (mActivity instanceof MyActivity) {
    // ....
} else {
    // ....
}
0 голосов
/ 26 апреля 2011

Извлеките код из реализации AsyncTask и передайте его в Activity. Пример:

public interface MyDelegate {
    public void updateProgress(....)
}

Ваш AsyncTask принимает делегата и вызывает его при получении:

public class MyAsyncTask .... {
    public MyAsyncTask(MyDelegate myDelegate) { ... }

    // somewhere in your code (probably onProgressUpdate)
    myDelegate.updateProgress(...)
}

Ваша деятельность / ы реализует / ы делегат:

public class MyActivity extends Activity implements MyDelegate {
   public void updateProgress(...) {
       // update ui
   }

   // somewhere in your code:
   new MyAsyncTask(this).execute(...);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...