2010-12-09 3 views
1

У меня есть основной вид деятельности, который запускает дочернюю деятельность, используя следующий код:Android: Прогресс Диалог не Отображение

Intent intent = new Intent(); 
intent.setClassName(MyChildActivity.class.getPackage().getName(), MyChildActivity.class.getName()); 
((Activity)context).startActivity(intent); 

Я пытаюсь выполнить трудоемкую задачу в детской деятельности и хотел бы, чтобы отобразить ProgressDialog, пока я это делаю. Мой код выглядит так:

private ProgressDialog _progressDialog; 

private OnClickListener btn_onClick = new OnClickListener() { 
    public void onClick(View v) { 
     _progressDialog = ProgressDialog.show(
      v.getContext(), 
      "Please wait", 
      "Performing task..." 
     ); 

     TaskThread t = new ExportThread(v.getContext()); 
     t.start(); 
    } 
}; 

private class TaskThread extends Thread{ 
    private Context _context; 

    public TaskThread(Context context) { 
     _context = context; 
    } 

    private Handler _handler = new Handler() { 
     @Override 
     public void handleMessage(Message msg) { 
      _progressDialog.dismiss(); 
     } 
    }; 


    @Override 
    public void run() { 
     performTask(_context); 
     _handler.sendEmptyMessage(0); 
    } 
} 

По какой-то причине ProgressDialog не отображается. Если я использую тот же самый код в основном действии, он работает, но не в дочерней активности. Кроме того, следующий код также не отображать ProgressDialog (но Toast делает дисплей):

private ProgressDialog _progressDialog; 

private OnClickListener _btn_onClick = new OnClickListener() { 
    public void onClick(View v) { 
     _progressDialog = ProgressDialog.show(
      v.getContext(), 
      "Please wait", 
      "Performing task..." 
     ); 

     try { 
      Thread.sleep(2000); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     _progressDialog.dismiss(); 

     Toast.makeText(v.getContext(), "Done with progress dialog.", Toast.LENGTH_SHORT).show(); 
    } 
}; 

Все идеи вне там? Разве нам не разрешено отображать ProgressDialog из дочерней активности?

спасибо.

ответ

1

Зачем использовать нить вместо async task?

Асинхронная задача реализует метод onProgressUpdate и publishProgress, что делает его легким для отображения и диалоговые обновления UI/прогресса.

Вот несколько примеров кода: http://android-projects.de/2010/12/08/threading-in-android-apps-wir-entwickeln-einen-zahler/

+0

Спасибо, ArtWorkAD. Я понятия не имею, почему ваше предложение сработало, но так оно и было. Не могли бы вы объяснить мне, почему подход AsyncTask работал, когда подход Thread не сделал этого? Спасибо. – mahdaeng 2010-12-09 22:08:33