【问题标题】:android show spinning progress dialog until activity finishsandroid显示旋转进度对话框,直到活动完成
【发布时间】:2012-10-02 14:04:45
【问题描述】:

我正在尝试显示一个旋转的进度对话框,直到我的活动调用方法完成()。我在调用finish() 之前调用progressDialog.show()。我可以看到微调器,但它没有旋转......有什么建议吗?

我尝试将finish() 和在其他活动的onActivityResult() 中调用的内容放在后台线程中,因此ui 线程不必做任何事情。 当我正在调试并且我在另一个线程上的 finish() 方法而不是主线程上等待时,进度对话框正在旋转......当我更进一步并调用 finish() 方法时,进度对话框停止旋转并且1-2 秒后活动消失。

所以我唯一的建议是,finish() 方法是不移动进度对话框的原因...是否有可能让它移动?

提前致谢!

编辑: 该代码位于已完成的活动 A 中。

private void goBack() {
    setResult((mReopen) ? Constants.RESULT_REOPEN : RESULT_OK);
    if (mReopen) {
        mProgressDialog.show();
    }

    new Thread(new Runnable() {
        @Override
        public void run() {
            finish();
        }
    }).start();
}

该代码位于启动活动 A 的活动 B 中。

@Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent intent) {
    if (requestCode == Constants.REQUEST_CODE_OPEN_EMAG) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                switch (resultCode) {
                    case Constants.RESULT_REOPEN:
                        mReopen = true;
                        openEmag(mLastOpenedEmagId, false, false);
                        break;
                    default:
                        mReopen = false;
                        break;
                }
            }
        }).start();
    }
}

正如您所见,所有东西都在与 ui 线程不同的线程中调用。

【问题讨论】:

  • 您需要包含一些代码,以便人们可以看到您在做什么。

标签: android android-activity dialog progress


【解决方案1】:

finsih() 停止您的活动并退出它。 你是什​​么意思后台线程*s*?

您应该有一个用于繁重操作的后台线程,并在该线程结束时调用 finish()。

像这样:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == yourCode) {
        if (resultCode == RESULT_OK) {
            //... Do dialog.show() here
            new Thread(){
                public void run() {
                    //... Your stuff here
                    finish();
                };
            }.start();
        }
    } else {
        super.onActivityResult(requestCode, resultCode, data);
    }
}

【讨论】:

  • 是的,这正是我正在做的,请查看编辑的代码
  • new Thread ... finish() ... 将几乎立即执行您的完成。而且由于您在模态活动中启动对话框,因此它不会显示很长时间,因为在 show() 之后立即调用了 finish()。
  • 在 new Thread().. 中,您应该放置应该在后台运行的长时间运行的代码(如我的示例),并在代码完成后在线程中调用完成(我的示例再次)。另一方面,对话框应该在 UI 线程上启动。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多