在AlertDialog按钮上单击显示Progressdialog

时间:2014-06-11 06:51:20

标签: android android-alertdialog progressdialog

当用户点击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;

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

2 个答案:

答案 0 :(得分:1)

 runOnUiThread(new Runnable() {

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

答案 1 :(得分:0)

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

ProgressDialog pd = new ProgressDialog(NewsDetails.this);

为:

pd = new ProgressDialog(NewsDetails.this);

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

---编辑---

好的,在更好地理解了手头的问题之后,您还可以尝试声明警报框构建器全局,在“ok”按钮的onClickListener中定义和显示它,并在{{1}的末尾解除它方法(就像你使用进度对话框一样)。这应该有用。

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