Хотите отобразить AlertDialog в onCreate of Activity — Android

#android #android-alertdialog #showdialog #oncreate

#Android #android-alertdialog #показать dialog #oncreate

Вопрос:

В моей активности я вызываю MyDialog (пользовательский диалог) в onCreate () и обрабатываю его DismissListener в Activity, чтобы определить, отменено оно или нет. Если он отменен, я завершаю действие, иначе загружаю activty. В течение этого времени загрузки я хочу показать диалоговое окно оповещения / выполнения, чтобы пользователь знал, что его загрузка, пожалуйста, подождите. Но я не могу увидеть диалоговое окно. Вот как я закодировал :

   public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ld = new AgreeDialog(this);
    ld.setOnDismissListener(new OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
           if (ld.isCancelled)
    MyActivity.this.finish();
       else {
    //ProgressDialog pd = CreateLoadingDialog();
    //pd.show();
    //Log.i(TAG, "Before Load Is PD showing - "   pd.isShowing());  // Shows true
          /*
    AlertDialog.Builder adb = new AlertDialog.Builder(StartUltimate.this);
    adb.setTitle("Loading...");
    adb.setCancelable(false);
    AlertDialog ad = adb.create();
    ad.show();
    */  
    MyActivity.this.showDialog(0);
    LoadAfteAgree();  // This takes time sonetimes, so want a dialog while this is working 
    MyActivity.this.removeDialog(0);

    //ad.dismiss();
                // pd.dismiss();
    //Log.i(TAG, "After Load Is PD showing - "   ad.isShowing());    // Shows false
     }
}           
    });

@Override
protected Dialog onCreateDialog(int id) {
    switch(id) {
    case 0:
        loadingDlg = new ProgressDialog(this);
        loadingDlg.setMessage("Loading...");
        loadingDlg.setCancelable(false);
        loadingDlg.setIcon(R.drawable.icon);
        return loadingDlg;
    }
    return null;
}
  

Почему я никак не могу увидеть какое-либо диалоговое окно? Я также пытался вызвать их в LoadAfterAgree (), но также безуспешно, те же результаты.

Любая помощь высоко ценится.

Спасибо

Комментарии:

1. Если вы не видите никакого диалогового окна, попробуйте вместо этого отобразить его в ‘OnStart()’-методе.

Ответ №1:

вы выполняете свои длительные операции в потоке пользовательского интерфейса. Переместите их в метод doInBackground от AsyncTask. Смотрите пример здесь.

Комментарии:

1. Чтобы немного добавить к этому… экран не начнет ничего отображать до тех пор, пока не вернется метод onCreate () (и я полагаю, что также после OnStart () и onResume ()). Итак, вы говорите системе показать это, выполнить некоторую работу, а затем скрыть это до того, как фреймворк вызовет какие-либо функции макета и рисования. Короче говоря, делайте то, что говорит Владимир.

Ответ №2:

Чтобы остановить диалоговое окно, вызывающее любые утечки памяти, убедитесь, что в вашем activity включено следующее;

 AlertDialog _alert;

  @Override
  public void onPause() {
      super.onPause();

      if(_alert != null)
          _alert.dismiss();
  }
  

Комментарии:

1. Спасибо. Не знаю, насколько эффективным будет приведенный выше код, но добавил в свой класс Activity, чтобы избежать каких-либо ошибок утечки окна.