Android 等待对话框出现时的进度对话框
Android progress dialog while waiting to dialog show up
在我的 android 应用程序中,对话框的显示需要一些时间。那时我想显示进度对话框。我了解到进度对话框应该在线程中执行,但是当我使用线程时它会出错。
我在 oncreate 方法中创建了进度对话框,并试图在我的按钮的 onclick 方法中显示。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = getApplicationContext();
mProgressDialog = new ProgressDialog(context, R.style.StyledDialog);
mProgressDialog.setCanceledOnTouchOutside(false);
Drawable drawable = context.getResources().getDrawable(R.drawable.progress_dialog);
mProgressDialog.setProgressDrawable(drawable);
}
以下代码是我的按钮的 onclick 方法,它在 xml 文件中定义如下:android:onClick="refList"
public void refList(View v) {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
mProgressDialog.show();
}
});
t.start();
if(!refListDialog.isShowing()) {
refListDialog.show();
t.interrupt();
}
}
这是例外情况:
FATAL EXCEPTION: Thread-27305 java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at android.os.Handler.<init>(Handler.java:121)
at android.view.ViewRootImpl$ViewRootHandler.<init>(ViewRootImpl.java:3052)
at android.view.ViewRootImpl.<init>(ViewRootImpl.java:3321)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:294)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:226)
at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:151)
at android.app.Dialog.show(Dialog.java:277)
at gcm.b4deploy.com.hesapozeti.MainActivity.run(MainActivity.java:196)
at java.lang.Thread.run(Thread.java:856)
我真的卡住了,正在等待想法。提前致谢。
这样试试
runOnUiThread(new Runnable() {
public void run() {
mProgressDialog.show();
}
});
我真的不明白为什么要将 progressDialog 放在线程中。
yourProgress = new ProgressDialog(this);
yourProgress.setTitle("Title");
yourProgress.setMessage("wait for a while"); yourProgress.getProcess();
yourProgress.show();
将此代码放在 onClick 方法的函数中的第一个位置。它将执行 sequentially.And 你可以做条件语句,如果完成,调用 yourProgress.dismiss();
- 在 progressDialog.setTitle 上方添加您的声明。我建议你在这个方法之外声明进度对话框,这样你就可以在 return 为真的另一个方法中关闭它。只需删除那些可运行的东西。
在我的 android 应用程序中,对话框的显示需要一些时间。那时我想显示进度对话框。我了解到进度对话框应该在线程中执行,但是当我使用线程时它会出错。
我在 oncreate 方法中创建了进度对话框,并试图在我的按钮的 onclick 方法中显示。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = getApplicationContext();
mProgressDialog = new ProgressDialog(context, R.style.StyledDialog);
mProgressDialog.setCanceledOnTouchOutside(false);
Drawable drawable = context.getResources().getDrawable(R.drawable.progress_dialog);
mProgressDialog.setProgressDrawable(drawable);
}
以下代码是我的按钮的 onclick 方法,它在 xml 文件中定义如下:android:onClick="refList"
public void refList(View v) {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
mProgressDialog.show();
}
});
t.start();
if(!refListDialog.isShowing()) {
refListDialog.show();
t.interrupt();
}
}
这是例外情况:
FATAL EXCEPTION: Thread-27305 java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at android.os.Handler.<init>(Handler.java:121)
at android.view.ViewRootImpl$ViewRootHandler.<init>(ViewRootImpl.java:3052)
at android.view.ViewRootImpl.<init>(ViewRootImpl.java:3321)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:294)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:226)
at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:151)
at android.app.Dialog.show(Dialog.java:277)
at gcm.b4deploy.com.hesapozeti.MainActivity.run(MainActivity.java:196)
at java.lang.Thread.run(Thread.java:856)
我真的卡住了,正在等待想法。提前致谢。
这样试试
runOnUiThread(new Runnable() {
public void run() {
mProgressDialog.show();
}
});
我真的不明白为什么要将 progressDialog 放在线程中。
yourProgress = new ProgressDialog(this);
yourProgress.setTitle("Title");
yourProgress.setMessage("wait for a while"); yourProgress.getProcess();
yourProgress.show();
将此代码放在 onClick 方法的函数中的第一个位置。它将执行 sequentially.And 你可以做条件语句,如果完成,调用 yourProgress.dismiss();