【问题标题】:Android progress dialog while waiting to dialog show up等待对话框出现时的Android进度对话框
【发布时间】:2016-09-21 22:55:03
【问题描述】:

在我的 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);
}

以下代码是我在 xml 文件中定义的按钮的 onclick 方法,例如: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)

我真的陷入困境并等待想法。提前致谢。

【问题讨论】:

  • 我不知道你在哪里听到的,但进度对话框不应该在线程中调用

标签: android multithreading dialog onclick progressdialog


【解决方案1】:

这样试试

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

【讨论】:

  • 仍然出现错误:致命异常:主要 java.lang.IllegalStateException:无法在 android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener 执行 android:onClick 的方法..
【解决方案2】:

我真的不明白你为什么将 progressDialog 放在一个线程中。

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

将此代码首先放在 onClick 方法中的函数中。它会按顺序执行。你可以做条件语句,如果完成了,调用yourProgress.dismiss();

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

【讨论】:

  • 当我按照你说的去做时,它给出了一个错误:致命异常:主要 java.lang.IllegalStateException:无法在 android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener 执行 android:onClick 的方法。 ..
  • If (statement) { yourProgressDialog... Then your statement }else{}
  • 谢谢,问题是我使用了 getApplicationContext() 而不是 MainActivity.this。无需使用线程。
  • 你删除runnable吗?你刚刚创建的线程? getApplicationContext() 适用于片段。在活动用户 CLASS_NAME.this 中。 (很高兴提供帮助,即使它缺乏更多指导)
  • 我已经删除了。但它仍然出现错误。然后我创建像你这样的 onclick 方法(不是通过定义 .setOnClickListener()....在 xml 中定义的)然后错误就改变了。然后我用谷歌搜索该错误并再次使用stackoverflow(stackoverflow.com/questions/5796611/…)然后它解决了。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2013-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多