带有进度对话框的Runnable完成时的Android Show对话框

时间:2015-01-12 09:46:40

标签: android android-fragments

我有一个片段。创建片段时,我想显示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调用对话框。

3 个答案:

答案 0 :(得分:0)

永远不要在最终的APP中使用sleep()。 尝试这种方式,新建一个Runnable(),并在句柄上调用postDelay(runnable,delayTimes)。

答案 1 :(得分:0)

您可以使用以下代码:

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);

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

答案 2 :(得分:0)

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
        }
    });