Android Runnable with Progress Dialog 完成时显示对话框

Android Show dialog when Runnable with Progress Dialog finishes

我有一个片段。创建片段后,我想显示一个进度对话框 3 秒钟,然后关闭它并显示一个弹出对话框。我在下面附上我的代码。

来自我的片段的 onCreate():

final ProgressDialog myPd_ring=ProgressDialog.show(context, "Please wait", "text..", true);
myPd_ring.setCancelable(false);
new Thread(new Runnable() {
        @Override
        public void run() {
            try
            {
                Thread.sleep(3000);
            } catch(Exception e)
            {
            }
            myPd_ring.dismiss();

        }
    }).start();

showPopup(0, 8, 1, "Next photo");

还有我的弹窗方法:

public void showPopup(final int type, int photoNo, int currPhoto, String message) {
    final Dialog dialog = new Dialog(context);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(R.layout.popup_erroare);
    dialog.setCancelable(false);
    TextView textHeader;
    TextView textContent;

    textHeader = (TextView) dialog.findViewById(R.id.text_titlu);
    textContent = (TextView) dialog.findViewById(R.id.text_error);

    textHeader.setText("Procedura fotografiere");
    textContent.setText("Poza nr. " + currPhoto+ " of" + noPhoto+
            ". " + message);

    if (type == 0) {

    }
    Button btn_nu = (Button) dialog.findViewById(R.id.button_nu);
    if (type == 0) {
        btn_nu.setText("NU");

    }
    btn_nu.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            dialog.dismiss();
        }
    });
    btn_nu.setVisibility(View.GONE);
    Button btn_da = (Button) dialog.findViewById(R.id.button_da);
    btn_da.setText("Fotografiere");
    btn_da.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (type == 0) {
                captureImage();
            }
            dialog.dismiss();
        }
    });
    dialog.show();
}

问题是我的ProgressDialog没有出现,直接弹出。如果我将弹出调用方法放在新的 Thread() 正文中,我会收到错误消息。您似乎可以从 Runnable.

调用对话框

切勿在最终 APP 中使用 sleep()。 尝试这种方式,新建一个 Runnable(),并在 Handle 上调用 postDelay(runnable, delayTimes)。

您可以使用以下代码:

final ProgressDialog myPd_ring=ProgressDialog.show(context, "Please wait",
            "text..", true);
    myPd_ring.setCancelable(false);
    myPd_ring.show();

new Handler().postDelayed(new Runnable() {

            @Override
            public void run() {
             myPd_ring.dismiss();
                 showPopup(0, 8, 1, "Next photo");

            }
        }, 3000);

如果您有任何疑问,请告诉我。

Android Handler 有一个方便的方法 postDelay() 可以满足您的需要,例如:

final ProgressDialog myPd_ring=ProgressDialog.show(context, "Please wait", "text..", true);
new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            myPd_ring.dismiss();
            // show popup
        }
    }, 3000);

在Android中,所有与View相关的任务都必须在主线程中执行,在其他线程中执行会出错。例如,如果你想在后台任务中执行,你需要使用 myactivity.runOnUiThread()

    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            // show my popup
        }
    });