我想让一个虚拟进度对话框出现 2 或 3 秒。除了说检测之外,它实际上不会做任何事情。我有代码:
ProgressDialog dialog = ProgressDialog.show(this, "", "Detecting...",
true);
dialog.show();
dialog.dismiss();
但是我在节目和让对话出现几秒钟的解雇之间放了什么?谢谢!
我想让一个虚拟进度对话框出现 2 或 3 秒。除了说检测之外,它实际上不会做任何事情。我有代码:
ProgressDialog dialog = ProgressDialog.show(this, "", "Detecting...",
true);
dialog.show();
dialog.dismiss();
但是我在节目和让对话出现几秒钟的解雇之间放了什么?谢谢!
正确的方法 - 它不会阻塞你的主线程,所以 UI 保持响应:
dialog.show();
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
dialog.dismiss();
}
}, 3000); // 3000 milliseconds delay
progress.setProgress(100);
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
pdialog.dismiss();
}}, 3000);
您还可以使用CountDownTimer
比发布的任何其他解决方案更有效的 Android,它还支持通过其方法定期触发。onTick()
看看这个例子,
new CountDownTimer(3000, 1000) {
public void onTick(long millisUntilFinished) {
// You don't need anything here
}
public void onFinish() {
dialog.dismiss();
}
}.start();
你可以这样做:
new AsyncTask<Void, Void, Void>
{
ProgressDialog dialog = new ProgressDialog(MainActivity.this);
@Override
protected void onPreExecute() {
super.onPreExecute();
dialog.setTitle("Please wait");
dialog.setMessage("Preparing resources...");
dialog.setCancelable(false);
dialog.show();
}
@Override
protected Void doInBackground(Void... params) {
try{
Thread.sleep(3000);
}
catch(Exception e)
{
e.printStackTrace();
}
}
@Override
protected void onPostExecute(Void aVoid)
{
super.onPostExecute(aVoid);
if (dialog!=null && dialog.isShowing())
{
dialog.dismiss();
}
}
}.execute();
解雇和展示之间没有任何关系。时间取决于你。例如,对话框将在服务器访问之前显示,它会关闭获取结果的方式
dialog.show();
ServerCall();
dialog.close();
如果您需要空延迟意味着然后在这之间使用 CountDownTimer 调用..
如果有人正在寻找Xamarin.Android
(使用 C#)解决方案(Peter Knego 的回答),方法如下:
new Handler().PostDelayed(() => {
dialog.dismiss();
}, 1000);