2012-05-23 6 views
2

Как я могу использовать класс AsyncTask для отображения диалога при выполнении задачи ???AsyncTask для отображения диалога

class TestAsynTask extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected void onPreExecute() { 
     ProgressDialog.show(???, null, null); 
     super.onPreExecute(); 
    } 
    @Override 
    protected Void doInBackground(Void... params) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

} 

ответ

2

TestAsyncTask Если предположить, что это внутренний класс к Activity, то вы можете использовать имя активности .this получить контекст. Если TestAsyncTask не является внутренним классом, вам нужно передать экземпляр вашего Activity в конструктор, чтобы вы могли предоставить его как Context методу ProgressDialog.show().

Вот пример метода внутреннего класса:

class MyActivity extends Activity { 
    //Activity Lifecycle methods 

    class TestAsynTask extends AsyncTask<Void, Void, Void> { 
     ProgressDialog dialog; 

     @Override 
     protected void onPreExecute() { 
      dialog = ProgressDialog.show(MyActivity.this, "title", "message"); 
      super.onPreExecute(); 
     } 

     @Override 
     protected Void doInBackground(Void... params) { 
      //very long computation... 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void void) { 
      dialog.cancel(); 
     } 
    } 
} 

Вы заметите, что вы должны сохранить от ProgressDialog в переменной экземпляра в методе onPreExecute() и вызвать cancel() на него в методе onPostExecute().

Другой подход похож:

class MyActivity extends Activity { 
    //Activity Lifecycle methods 


} 

class TestAsynTask extends AsyncTask<Void, Void, Void> { 
    ProgressDialog dialog; 
    MyActivity activity;   

    TaskAsynTask(MyActivity activity) { 
     this.activity = activity; 
    } 

    @Override 
    protected void onPreExecute() { 
     dialog = ProgressDialog.show(activity, "title", "message"); 
     super.onPreExecute(); 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     //very long computation... 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void void) { 
     dialog.cancel(); 
    } 
} 
Смежные вопросы