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
}
});
我有一个片段。创建片段后,我想显示一个进度对话框 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
}
});