Відхилити діалогове вікно після завершення потоку

Я створюю нитку в Android, щоб працювати багато часу. Я хочу, щоб у головному екрані з'явився діалогове вікно відтворення з повідомленням про те, що операція вже завершена, але я хочу, щоб це діалогове вікно було відхилено після завершення потоку. Я спробував приєднатись, але він блокує потоку і не показує діалогове вікно. Я спробував використовувати:

dialog.show();
mythread.start();
dialog.dismiss(); 

але тоді діалогове вікно не відображається. Як я можу зробити цю послідовність, але чекати закінчення потоку без блокування основного потоку?

Це наскільки я отримав:

public class syncDataElcanPos extends AsyncTask {
    ProgressDialog pDialog;
    Context cont;
    public syncDataElcanPos(Context ctx) {
        cont=ctx;
    }

    protected void onPreExecute() {
    pDialog = ProgressDialog.show(cont,cont.getString(R.string.sync), cont.getString(R.string.sync_complete), true);
}

protected Void doInBackground(String... parts) {        
  //blablabla...
   return null;
}

protected void onProgressUpdate(Integer... item) {
    pDialog.setProgress(item[0]);//just for possible bar in a future.
}

protected void onPostExecute(Void unused) {
    pDialog.dismiss();
}

Але коли я намагаюся виконати це, це дає мені виняток: "Не можу додати вікно".

0

3 Відповіді

Коли ваша гілка закінчена, скористайтеся методом runOnUIThread, щоб відхилити діалогове вікно.

runOnUiThread(new Runnable() {
public void run() {
        dialog.dismiss();
    }
});
3
додано

Для цього існує два способи зробити це (і я віддаю перевагу першому другому: AsyncTask):

First : you display your alertDialog , and then on the method run() you should do like this

@override
public void run(){
//the code of your method run 
//....
.
.
.
//at the end of your method run() , dismiss the dialog
YourActivity.this.runOnUiThread(new Runnable() {
public void run() {
        dialog.dismiss();
    }
});

}

Second : Using an AsyncTask like this :

class AddTask extends AsyncTask {

    protected void onPreExecute() {
//create and display your alert here 
    pDialog = ProgressDialog.show(MyActivity.this,"Please wait...", "Downloading data ...", true);
}

protected Void doInBackground(Void... unused) {

   //here is the thread's work ( what is on your method run()
    items = parser.getItems();

    for (Item it : items) {
        publishProgress(it);
    }
    return(null);
}

protected void onProgressUpdate(Item... item) {
    adapter.add(item[0]);
}

protected void onPostExecute(Void unused) {
    //dismiss the alert here where the thread has finished his work
    pDialog.dismiss();
}
  }
1
додано

а в AsyncTask в послідовному режимі ви можете викликати звільнення

Ось приклад з іншого потоку

class AddTask extends AsyncTask {

    protected void onPreExecute() {
        pDialog = ProgressDialog.show(MyActivity.this,"Please wait...", "Retrieving data ...", true);
    }

    protected Void doInBackground(Void... unused) {
        items = parser.getItems();

        for (Item it : items) {
            publishProgress(it);
        }
        return(null);
    }

    protected void onProgressUpdate(Item... item) {
        adapter.add(item[0]);
    }

    protected void onPostExecute(Void unused) {
        pDialog.dismiss();
    }
  }
0
додано
Ви оголошуєте клас AddTask як InnerClass вашої діяльності? якщо так, то він повинен працювати, якщо ні, то вам слід передати контекст у ваш клас AddTask
додано Автор Houcine, джерело
у своїй діяльності в методі onCreate, ви повинні включити ваш клас syncDataElcanPos у такий спосіб: syncDataElcanPos instance = new syncDataElcanPos (this);
додано Автор Houcine, джерело
Дякую всім за вашу допомогу, спробуємо параметр AsyncTask і подивіться, як це відбувається ...
додано Автор MarioV, джерело
Як я можу додати контекст до діалогового вікна виконання? MyActivity.this не працює для мене, каже, що він не може створювати ці параметри, він сам бере активність, а не контекст.
додано Автор MarioV, джерело
Так, я перейшов до завдання, але тепер я отримую виняток, будь-які ідеї? код знаходиться в основній частині питання.
додано Автор MarioV, джерело
android_jobs_ua
android_jobs_ua
120 учасників

Публикуем вакансии и запросы на поиск работы по направлению Android. Здесь всё: full-time, part-time, remote и разовые подработки.

Mobile Dev Jobs UA
Mobile Dev Jobs UA
20 учасників

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin, RN и т.д.