Мой ProgressDialog не закрывается даже после загрузки представления.

1

Я хочу показать Progress-Dialog перед загрузкой моего представления. Сначала я написал код в onCreate(), но в этом случае диалог не появляется. Поэтому я написал его в onResume(), но в этом случае он не исчезает даже после загрузки представления. может ли кто-нибудь сказать, что здесь происходит?

              protected void onResume() {
    // TODO Auto-generated method stub

    super.onResume();
    dialog = ProgressDialog.show(this, "", "Please wait...", true); 
    //dialog.cancel();
    new Thread() 
    {
      public void run() 
      {

         try
           {

            sleep(1500);

      // do the background process or any work that takes time to see progress dialog

           }  
        catch (Exception e)
        {
            Log.e("tag",e.getMessage());
        }
    // dismiss the progressdialog   
     dialog.dismiss();
     }
    }.start();
    citySelected.setText(fetchCity);
    spinner.setSelection(getBG);
}
  • 1
    напишите dialog.dismiss (); строка вне кода потока.
  • 0
    мой ответ может дать вам некоторую логическую часть
Теги:
android-dialog

3 ответа

1

Вы не можете обновить интерфейс (который находится в основном UIthread) из других потоков. Если вы хотите выполнить любой запрос в фоновом режиме, вы можете использовать AsyncTask.

В методе onPreExecute, show dialog и onPostExecute вы можете отменить диалог.

Если вы хотите использовать Thread, обновите интерфейс с помощью обработчиков.

Использование AsyncTask

public class MyAsyncTask extends AsyncTask<String, Void, String> {
    ProgressDialog dialog = new ProgressDialog(ActivityName.this);
    @Override
    protected void onPreExecute() {
        dialog.show();
        super.onPreExecute();
    }

    @Override
    protected String doInBackground(String... params) {
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(String result) {
        dialog.dismiss();
        super.onPostExecute(result);
    }

}

В Activity onCreate Method,

MyAsyncTask task = new MyAsyncTask();
    task.execute();
  • 0
    Просто посмотрите мой обновленный ответ, чтобы использовать AsyncTask
  • 0
    Я попытался реализовать это, но он ставит экран на то же действие, а затем загружается следующий вид без отображения диалогового окна!
Показать ещё 1 комментарий
0

лучше использовать Asynctask........., но если вы все еще хотите того же или хотите know the solution only тогда, можете попробовать

new Thread() 
    {
      public void run() 
      {

         try
           {

            sleep(1500);

      // do the background process or any work that takes time to see progress dialog

           }  
        catch (Exception e)
        {
            Log.e("tag",e.getMessage());
        }




  YourActivity.this.runOnUIThread(new Runnable(){
                         @Override
                         public void run(){
                             // dismiss the progressdialog   
                              dialog.dismiss();
                        });





     }
    }.start();
  • 0
    Я пытался реализовать это, но все же это не работает! Диалог не пропустит.
0

Вы можете использовать AsyncTask. Это лучше, чем Thread

private class DownloadingProgressTask extends
        AsyncTask<String, Void, Boolean> {

    private ProgressDialog dialog = new ProgressDialog(ShowDescription.this);
    protected void onPreExecute() {
         this.dialog.setMessage("Please wait");
         this.dialog.show();

    }
    protected Boolean doInBackground(final String... args) {
        try {
                downloadFile(b.getString("URL"));
                return true;
        } catch (Exception e) {
                Log.e("tag", "error", e);
                return false;
        }
    }
    @Override
    protected void onPostExecute(final Boolean success) {

         if (dialog.isShowing()) {
         dialog.dismiss();
         }
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню