【问题标题】:Show Progressdialog on AlertDialog button click在 AlertDialog 按钮单击时显示 Progressdialog
【发布时间】:2014-06-11 06:51:19
【问题描述】:

我想在用户单击 AlertDialog 上的“确定”按钮时显示 ProgressDialog。但是使用我当前的代码,ProgressDialog 根本不显示。此外,AlertDialog 应该在按钮单击后关闭,并且应该显示 ProgressDialog。现在,AlertDialog 在单击按钮后消失,但不显示 ProgressDialog

这是我的代码:-

 case R.id.btnAddComms:
            scrollNews.fullScroll(v.FOCUS_DOWN);
            btnAddComms.setPressed(true);

            AlertDialog.Builder builder = new AlertDialog.Builder(NewsDetails.this);
            builder.setTitle("Post");
            builder.setIcon(R.drawable.post);


            final EditText input1 = new EditText(NewsDetails.this);
            LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
                    LinearLayout.LayoutParams.MATCH_PARENT,
                    LinearLayout.LayoutParams.MATCH_PARENT);

            input1.setLayoutParams(lp);
            builder.setView(input1);


            builder.setPositiveButton("Ok", new DialogInterface.OnClickListener()
            {

                public void onClick(DialogInterface dialog, int id) 
                {


                     postedComment = input1.getText().toString();

                     if(postedComment.length()>0)
                     {
                         dialog.dismiss();
                         ProgressDialog pd = new ProgressDialog(NewsDetails.this);
                         pd.setMessage("test");
                         pd.show();
                         pd.setCancelable(true);
                         PostComments(postedComment);
                         pd.dismiss();

                     }
                     else
                     {
                         Toast.makeText(NewsDetails.this, "Please enter a comment.", Toast.LENGTH_LONG).show();
                         input1.findFocus();
                     }






                }
.setCancelable(false);



            alert = builder.create();
            alert.setCanceledOnTouchOutside(true);

            alert.show();
            break;

关于如何做到这一点的任何想法。

【问题讨论】:

  • 您在单击按钮后立即关闭进度对话框。我不知道 PostComments 在做什么,但你应该做一些解决方法。我认为对话框应该在 PostComment 执行后关闭,对吧?就像你做的一样,pd.close() 不会等到 PostComments 被执行
  • @Opiatefuchs Iam 取消了dialog,即 ALertDialog。 PostComments 正在进行 API 调用
  • 尝试删除pd.dismiss();
  • 不,你没有。首先,您使用 dialog.dismiss() 关闭 alertDialog。这是正确的,但最后,您编写了 pd.dismiss()。 pd 是你的 ProgressDialog
  • dialog.dismiss();在 pd.dismiss() 之后给出;所以你的代码是 ProgressDialog pd = new ProgressDialog(NewsDetails.this); pd.setMessage("测试"); pd.show(); pd.setCancelable(true);发表评论(postedComment); pd.dismiss(); dialog.dismiss();

标签: android android-alertdialog progressdialog


【解决方案1】:
 runOnUiThread(new Runnable() {

                        @Override
                        public void run() {
                            PostComments(postedComment);
                        }
                    });

【讨论】:

  • 上面这段代码有什么用?你能解释一下吗?
  • @Digvesh 这不是我要问的
  • 这不仅会在方法运行时“冻结”UI(包括进度对话框),这通常是不好的做法,这也会导致应用程序崩溃,因为该方法执行网络操作,这是你在 UI 线程上做不到的
【解决方案2】:

首先,将dialog.dismiss(); 移动到单击按钮时调用的代码的末尾...您不希望对话框在执行相关代码之前自行删除... 接下来,您将在显示进度对话框后立即关闭它。我建议您通过将行:ProgressDialog pd; 放在类的顶部并更改行来声明进度对话框全局:

ProgressDialog pd = new ProgressDialog(NewsDetails.this);

到:

pd = new ProgressDialog(NewsDetails.this);

最后,从单击按钮时调用的代码中删除pd.dismiss(); 行,并将其放在PostComments(postedComment); 方法的末尾,以便该方法在完成时删除进度对话框。 您提到该方法执行 API 调用。如果它在 ASyncTask 中,请将 pd.dismiss(); 行放在 onPostExecute 部分中。 祝你好运! :)

--- 编辑 ---

好的,在更好地理解手头的问题之后,您还可以尝试将您的警报框构建器也声明为全局,在“确定”按钮的 onClickListener 中定义并显示它,并在 PostComments(postedComment); 方法结束时将其关闭(就像您对进度对话框所做的那样)。这应该可以。

顺便说一句,我个人更喜欢设计我自己的自定义对话框,而不是同时在屏幕上显示 2 个对话框,其中已经有进度条。然后,使用View.setVisibility(View.GONE / View.VISIBLE / View.INVISIBLE) 方法让进度条随心所欲地出现和消失。当然,您仍然必须全局声明它并在 PostComments(postedComment); 方法的末尾将其关闭,但无论是在代码中还是对用户来说,它都会看起来更清晰(在我看来)。 Android Developers website 对创建自定义对话框有很好的解释。如果还不够,请告诉我,我会举个例子。

【讨论】:

  • 我试过你说的。但是在解除警报框而不是单击按钮后,进度对话框仍然显示
  • 我一定误解了你要做什么。您是否希望在显示进度对话框时警报框保留在那里,并在“post cmets”方法完成时让它们都消失?
  • 我的问题的任何解决方案
  • 你试过我更新的答案了吗?如果有效,请接受我的回答。谢谢
猜你喜欢
  • 2013-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-14
  • 1970-01-01
  • 1970-01-01
  • 2017-08-19
相关资源
最近更新 更多