2013-02-26 2 views
2

Я начинаю asynctask внутри SherlockListFragment, который был создан внутри SherlockFragmentActivity в качестве вкладки.Android: Диалог прогресса в AsyncTask не отображается

проходит asynctask конструктор моего контекст деятельности и инициализировать AsyncTask как это внутри onCreate():

AsyncTask<String, Integer, String[]> asynctask = new DownloadFilesTask(getSherlockActivity()).execute(url); 

Конструктор внутри класса AsyncTask DownloadFilesTask выглядит следующим образом:

private ProgressDialog dialog; 
private SherlockFragmentActivity activity; 

public DownloadFilesTask(SherlockFragmentActivity activity) { 
     this.activity = activity; 
     this.dialog = new ProgressDialog(activity); 
    } 

Предварительно выполнить и post execute выглядят так:

protected void onPreExecute(){ 
     Log.d("AsyncTask!", "Showing dialog now!"); //shown in logcat 
     dialog.setMessage("Retrieving all currently airing anime. Please wait."); 
     dialog.setCancelable(false); 
     dialog.show(); 
    } 

.

protected void onPostExecute(String[] result) { 
    Log.d("AsyncTask!", "Dismissing dialog now!"); //shown in logcat 
    dialog.dismiss(); 
} 

Но диалог прогресса не отображается, пока все фоновые работы выполняются! Что я здесь делаю неправильно? Я думаю, что это может быть проблемой контекста.

+0

Вы должны опубликовать свой код о том, как (и когда) вы выполняете AsyncTask. Примечание. Вам нужно создать экземпляр и вызвать выполнение в потоке пользовательского интерфейса (на http://developer.android.com/reference/android/os/AsyncTask.html) –

+0

Я создаю экземпляр AsyncTask в onCreate класса который расширяет SherlockListFragment. Как я могу назвать это в потоке пользовательского интерфейса? –

+1

только ради эксперимента, отбросьте аспект SherlockFragmentActivity и просто перейдите в хороший контекст. вызовите ваш конструктор с помощью нового DownloadFilesTask (this), а затем .execute (url) и посмотрите, что произойдет. –

ответ

4

Часть проблемы была зафиксирована благодаря комментарию от Mike снова проходить о передаче простого старого контекста.

Что касается диалога, который не отображается ... Я просто был глупым, потому что я вызвал .get() после выполнения ВНЕШНЕГО АЗИНА, который блокирует поток пользовательского интерфейса. Очевидно, диалог не будет отображаться именно так.

-1

В Java «Если ваш метод переопределяет один из его методов суперкласса, вы можете вызывать переопределенный метод с помощью ключевого слова super». Поэтому изменить метод onPreExecute(), когда вы начинаете диалог о ходе работы:

@Override 
protected void onPreExecute(){ 
    super.onPreExecute(); 
    dialog = new ProgressDialog(activity); 
    Log.d("AsyncTask!", "Showing dialog now!"); //shown in logcat 
    dialog.setMessage("Retreiving all currently airing anime. Please wait."); 
    dialog.setCancelable(false); 
    dialog.show(); 
} 
+3

Это из источника [AsyncTask] (https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/os/AsyncTask.java): 'protected void onPreExecute() { } '. Призыв к супер не будет делать много. –

Смежные вопросы