【问题标题】:Android dialog dismiss after certain computation某些计算后Android对话框关闭
【发布时间】:2019-11-24 21:52:55
【问题描述】:

我遇到了以下问题:

我使用这样的对话框创建了一个等待微调器

final Dialog progDialog = new Dialog(context);
progDialog.setContentView(R.layout.progress_dialog);
progDialog.setTitle("Calculating...");
progDialog.setCancelable(false);
progDialog.setCanceledOnTouchOutside(false);

WindowManager.LayoutParams lp = progDialog.getWindow().getAttributes();
lp.dimAmount = 0.7f;
progDialog.show();

然后,我在后台计算一些东西

for()...
    for()...

计算完成后,我想关闭我的对话框

progDialog.dismiss();

但是,这会导致我的对话框根本不会显示。当我删除最后一行时,会显示对话框但永远不会关闭。有解决办法吗?

【问题讨论】:

  • 我认为你的计算速度足够快,看不到对话进度,
  • 不是,因为解雇后,我开始了一个新的活动。如果没有最后一行,对话框会在开始活动之前显示大约 1 秒。

标签: java android dialog


【解决方案1】:

你最好试试AsyncTask

private class YourAsyncTask extends AsyncTask<Void, Void, Void> {
    private ProgressDialog progDialog;

    public YourAsyncTask(MyMainActivity activity) {
        progDialog = new ProgressDialog(activity);
    }

    @Override
    protected void onPreExecute() {
       progDialog.setContentView(R.layout.progress_dialog);
       progDialog.setTitle("Calculating...");
       progDialog.setCancelable(false);
       progDialog.setCanceledOnTouchOutside(false);

       progDialog.show();
    }
    @Override
    protected Void doInBackground(Void... args) {
        // do background work here
        return null;
    }
    @Override
    protected void onPostExecute(Void result) {
         // do UI work here
        if (progDialog.isShowing()) {
            progDialog.dismiss();
        }
    }
}

在您的主活动中使用上述代码。并且,在doInBackground 中进行计算。

要为您的计算设置计时器,请尝试以下代码:

 Runnable progressRunnable = new Runnable() {

        @Override
        public void run() {
            progDialog.cancel();
        }
    };

    Handler pdCanceller = new Handler();
    pdCanceller.postDelayed(progressRunnable, 3000);

添加显示/隐藏:

progDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
    @Override
    public void onCancel(DialogInterface dialog) {
        theLayout.setVisibility(View.GONE);
    }
});

更新

ProgressDialog 类自 API 26 起已弃用

【讨论】:

  • 感谢您的解决方案。我实现了它,它按预期工作。但是,感觉很慢,因为我的计算现在需要 10 秒(之前约 1-2 秒)。有没有办法提高计算速度?
  • 嗨@MDaniel我已经用代码更新了上面的答案,你可以用它来为你的对话设置计时器,试一试。
  • 非常感谢,正是我要找的东西
猜你喜欢
  • 2013-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-12
  • 1970-01-01
  • 2015-02-03
  • 2018-03-04
  • 1970-01-01
相关资源
最近更新 更多