【问题标题】:ProgressDialog dismiss open new activityProgressDialog 关闭打开新活动
【发布时间】:2017-05-29 09:44:24
【问题描述】:

如何在进度对话框关闭时打开新活动?

这是我的部分代码:

            @Override
        public void onClick(View v) {
            progressDoalog = new ProgressDialog(Hack.this);
            progressDoalog.setMax(100);
            progressDoalog.setMessage("Its loading....");
            progressDoalog.setTitle("ProgressDialog bar example");
            progressDoalog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            progressDoalog.show();
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        while (progressDoalog.getProgress() <= progressDoalog
                                .getMax()) {
                            Thread.sleep(200);
                            handle.sendMessage(handle.obtainMessage());
                            if (progressDoalog.getProgress() == progressDoalog
                                    .getMax()) {
                                progressDoalog.dismiss();
                            }
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }).start();
        }

        Handler handle = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                progressDoalog.incrementProgressBy(1);
            }
        };
    });
}

请帮帮我。我认为这是在进度对话框完成后打开活动的一种解决方案。

【问题讨论】:

标签: java android progressdialog


【解决方案1】:

只需添加:

progressDoalog.setOnDismissListener(new DialogInterface.OnDismissListener(){
            @Override
            public void onDismiss(DialogInterface dialog) {
                //Launch your activity
            }
        });

这是一个简单的侦听器,在您的对话框关闭时调用

【讨论】:

  • 在progressDoalog.setOnDismissListener()之前需要进行空检查
  • @EKN 对不起,我是新手,你是什么意思?你能在我的剧本上给我看吗?
  • 在显示对话框之前尝试设置监听器。你也可以分享错误日志吗?
【解决方案2】:

您可以使用AsyncTask

在 AsyncTask 中有 3 个重要的方法需要重写。

  1. doInBackground :这是后台处理的主要内容。
  2. onPreExecute:在此处显示您的 ProgressDialog (showDialog)
  3. onPostExecute:在此处隐藏您的 ProgressDialog(removeDialog 或 dismissDialog)

如果您将 AsyncTask 子类作为 Activity 的内部类,则可以在 AsyncActivity 中调用框架方法 showDialog、dismissDialog 和 removeDialog。

这是 AsyncTask 的示例实现:

class ProgressTask extends AsyncTask<String, Integer, Boolean> {
  @Override
  protected Boolean doInBackground(String... params) {
    try {
      Thread.sleep(4000);  // Do your real work here
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    return Boolean.TRUE;   // Return your real result here
  }
  @Override
  protected void onPreExecute() {
    showDialog(AUTHORIZING_DIALOG);
  }
  @Override
  protected void onPostExecute(Boolean result) {
    // result is the value returned from doInBackground
    removeDialog(AUTHORIZING_DIALOG);
    Intent i = new Intent(this, LandingActivity.class);
    startActivity(i);
  }
}

【讨论】:

    【解决方案3】:

    @Markus Maleńki 请参考以下代码

    if(progressDoalog!=null && progressDoalog.isShowing()){
      progressDoalog.setOnDismissListener(new 
      DialogInterface.OnDismissListener(){
      @Override
        public void onDismiss(DialogInterface dialog) {
        //Launch your activity
       }
    });
    

    }

    【讨论】:

    • 我有一个问题。 isShowing 无法解析该符号
    • 检查你是 import android.app.ProgressDialog;在你的课堂上
    • 我对我的回答做了一点修改,其实isShowing()是一个函数,我忘了在isShowing中加上函数参数,见谅。
    • 我查过了。不工作。只是出现了progressdialog,然后什么都没有,对话框消失了,这一切
    • 希望空指针异常和 isShowing 无法解决符号问题已修复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多