загрузка в фоновом режиме при отображении выполнения кода ProgressDialog + pause - PullRequest
0 голосов
/ 11 февраля 2012

Я прошу прощения за многословное название - я не был уверен, как это точно сформулировать. Я пытаюсь (в рамках моего метода onCreate ()):

-Инициализировать некоторые вещи

- отображать диалог прогресса, пока я загружаю некоторые данные из моего бэкэнда

- очистить диалоговое окно прогресса, а затем продолжить с кодом

Я понимаю, что типичным решением для диалога прогресса является асинхронная задача, которую я пытался использовать (см. Ниже). Однако это не блокирует выполнение кода, как я хочу. Код, который следует после lwpd.execute (), полагается на загрузку, которая уже произошла. Я слишком усложняю это? Как правильно делать то, что я хочу?

Для справки, моя реализация Asynctask:

public class LoadWithProgressDialog extends AsyncTask<Void, Void, Boolean>{
    private ProgressDialog pd; //the progress dialog
    private String title; //the title of the progress dialog
    private String  message; //the body of the progress dialog
    private Runnable task; //contains the code we want to run in the background
    private Context c;


    public LoadWithProgressDialog(Context context,String t, String m,Runnable r){
        super();
        c = context;
        task = r;
        title = t;
        message = m;
    }

    @Override
    protected void onPreExecute(){
        pd = ProgressDialog.show(c,title, message, false, false);
    }

    @Override
    protected Boolean doInBackground(Void... params) {
        task.run();
        return true;
    }
   @Override
   protected void onPostExecute(Boolean result) {
            pd.dismiss(); 
   }





}

и

 super.onCreate(savedInstanceState);
            setContentView(R.layout.main);

            //initialize variables


            LoadWithProgressDialog lwpd = new LoadWithProgressDialog(this,"Loading","Loading Truck Data", new Runnable() {
                public void run(){
                    //code that loads things
                }
            });
            lwpd.execute();

//continue on with my code

}

Ответы [ 2 ]

0 голосов
/ 11 февраля 2012

Не блокировка выполнения кода - это точка AsyncTask.Если вы хотите заблокировать выполнение кода, просто создайте ProgressDialog в главном потоке

0 голосов
/ 11 февраля 2012

Вы должны держать диалог прогресса в асинхронной задаче.

Любой код, который вы хотите выполнить после загрузки данных, можно поместить в метод onPostExecute!

public LoadWithProgressDialog(Context context,String t, String m,Runnable r){
    super();
    c = context;
    task = r;
    title = t;
    message = m;
}

@Override
protected void onPreExecute(){
    pd = ProgressDialog.show(c,title, message, false, false);
}

@Override
protected Boolean doInBackground(Void... params) {
    task.run();
    return true;
}
@Override
protected void onPostExecute(Boolean result) {
        pd.dismiss(); 

      // PUT YOUR CODE THAT YOU WANT TO RUN AFTER THE DATA HAS LOADED HERE!
}
...