【问题标题】:Want to display AlertDialog in onCreate of Activity - android想要在 Activity 的 onCreate 中显示 AlertDialog - android
【发布时间】:2012-12-14 22:14:38
【问题描述】:

在我的活动中,我在 onCreate() 中调用 MyDialog(自定义对话框)并在 Activity 中处理其 DismissListener 以查看其是否取消。如果它被取消,我完成活动,否则加载活动。在此加载期间,我想显示一个警报/进度对话框,让用户知道它正在加载,请稍候。但我看不到对话框。这就是我的编码方式:

  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() 中调用它们,但也没有成功,结果相同。

非常感谢任何帮助。

谢谢

【问题讨论】:

  • 如果您看不到任何对话框,请尝试在 'onStart()' 方法中显示它。

标签: android android-alertdialog showdialog oncreate


【解决方案1】:

您正在 UI 线程中执行长时间操作。将它们移动到 AsyncTask 的 doInBackground 方法。请参阅示例here

【讨论】:

  • 添加一点...屏幕不会开始绘制任何东西,直到 onCreate() 方法返回(我相信在 onStart() 和 onResume() 之后也是如此) .所以你告诉系统显示它,做一些工作,然后在框架调用任何布局和绘制函数之前隐藏它。简而言之,按照弗拉基米尔所说的去做。
【解决方案2】:

要停止导致任何内存泄漏的对话框,请确保您的活动中包含以下内容;

AlertDialog _alert;

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

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

【讨论】:

  • 谢谢。不知道上面的代码会有多好,但是已经添加到我的 Activity 类中以避免任何类型的窗口泄漏错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多