Я использую AsyncTask
для загрузки операций, которые я реализовал как внутренний класс.
В onPreExecute()
Я показываю загружающееся диалоговое окно, в котором я затем скрываюсь снова onPostExecute()
. Но для некоторых операций загрузки я знаю заранее, что они закончат очень быстро, таким образом, я не захочу отображать загружающееся диалоговое окно.
Я хотел указать на это булевым параметром, которому я мог передать onPreExecute()
но по-видимому по некоторым причинам onPreExecute()
не берет параметров.
Очевидное обходное решение должно было бы, вероятно, создать членское поле в моем AsyncTask или во внешнем классе, который я должен буду установить перед каждой операцией загрузки, но это не кажется очень изящным. Существует ли лучший способ сделать это?
Вы можете переопределить конструктор. Что-то вроде:
private class MyAsyncTask extends AsyncTask<Void, Void, Void> {
public MyAsyncTask(boolean showLoading) {
super();
// do stuff
}
// doInBackground() et al.
}
Затем, при вызове задачи, сделайте что-то вроде:
new MyAsyncTask(true).execute(maybe_other_params);
Edit:Это более полезно, чем создание переменных-членов, поскольку упрощает вызов задачи. Сравните приведенный выше код с:
MyAsyncTask task = new MyAsyncTask();
task.showLoading = false;
task.execute();