等待对话框显示的

时间:2016-05-24 15:54:38

标签: android multithreading dialog onclick progressdialog

在我的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$2.run(MainActivity.java:196)
        at java.lang.Thread.run(Thread.java:856)

我真的卡住了,等待着想法。提前谢谢。

2 个答案:

答案 0 :(得分:0)

试试这个

        runOnUiThread(new Runnable() {
        public void run() {
        mProgressDialog.show();
        }
    });

答案 1 :(得分:0)

我真的不明白你为什么把progressDialog放在一个帖子里。

yourProgress = new ProgressDialog(this);
yourProgress.setTitle("Title");
yourProgress.setMessage("wait for a while"); yourProgress.getProcess();
yourProgress.show(); 

将此代码放在onClick方法的函数中。它将按顺序执行。您可以创建条件语句,如果完成,则调用yourProgress.dismiss();

sample code - 在progressDialog.setTitle上方添加您的语句。我建议您在此方法之外声明进度对话框,以便您可以在另一个返回true的方法中忽略该对话框。只需删除那些可运行的东西。