Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在AlertDialog按钮上显示Progressdialog单击_Android_Android Alertdialog_Progressdialog - Fatal编程技术网

Android 在AlertDialog按钮上显示Progressdialog单击

Android 在AlertDialog按钮上显示Progressdialog单击,android,android-alertdialog,progressdialog,Android,Android Alertdialog,Progressdialog,我想在用户单击AlertDialog上的“Ok”按钮时显示ProgressDialog。但在我当前的代码中,ProgressDialog根本不显示。此外,单击按钮后,AlertDialog应关闭,并显示ProgressDialog。现在,单击按钮后AlertDialog将关闭,但不显示ProgressDialog 这是我的密码:- case R.id.btnAddComms: scrollNews.fullScroll(v.FOCUS_DOWN);

我想在用户单击AlertDialog上的“Ok”按钮时显示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;

你知道我该怎么做吗。

首先,移动
dialog.discouse()到单击按钮时调用的代码末尾。。。您不希望对话框在执行相关代码之前删除自身。。。
 runOnUiThread(new Runnable() {

                        @Override
                        public void run() {
                            PostComments(postedComment);
                        }
                    });
接下来,您将在显示进度对话框后立即关闭它。我建议您通过放置以下行来声明ProgressDialog全局:
ProgressDialog pd在类的顶部并更改行:

ProgressDialog pd = new ProgressDialog(NewsDetails.this);
致:

最后,删除
pd.discouse()行,并将其放置在
后命令(postedComment)的末尾方法,因此该方法在完成时删除进度对话框。
您提到该方法执行API调用。如果它位于ASyncTask中,则放置
pd.discouse()onPostExecute
部分中的code>行。 祝你好运!:)

---编辑---

好的,在更好地理解了手头的问题之后,您还可以尝试将警报框生成器声明为全局,在“确定”按钮的onClickListener中定义并显示它,并在
PostComments(postedComment)的末尾取消它方法(与您在“进度”对话框中所做的完全相同)。这应该行得通

顺便说一句,我个人更喜欢,而不是在屏幕上同时有两个对话框,设计自己的自定义对话框,其中已经有进度条。然后,使用
View.setVisibility(View.GONE/View.VISIBLE/View.INVISIBLE)
方法使进度条显示和消失。当然,您仍然需要全局声明它,并在
PostComments(postedComment)的末尾将其取消方法,但在我看来,无论是在代码中还是在用户看来,它都会显得更干净一些。

对于创建自定义对话框,有一个很好的解释。如果这还不够,请告诉我,我将提供一个示例。

单击按钮显示进度对话框后,您将立即关闭该对话框。我不知道PostComments在做什么,但你应该做一些变通。我认为对话框应该在PostComment执行后关闭,对吗?正如您所做的那样,pd.close()不会等待PostComments完成executed@OpiatefuchsIam将关闭作为ALertDialog的
对话框。PostComments正在进行API调用,请尝试删除
pd.disclose()不,你没有。首先,使用dialog.disclose()关闭alertDialog。这是正确的,但最后编写pd.discouse()。pd是您的ProgressDialogdialog.Disclose();在pd.disclose()之后给出;因此,您的代码是ProgressDialog pd=newProgressDialog(NewsDetails.this);pd.设置消息(“测试”);pd.show();pd.可设置可取消(真);后评论(PostedComments);pd.解散();dialog.dismise();这在上面的代码中有什么用?你能解释一下吗?@Digvesh这不是我要问的不仅会在方法运行时“冻结”UI(包括进度对话框),这通常是不好的做法,还会使应用程序崩溃,因为该方法执行网络操作,你不能在UI线程上这么做我试过你说的了。但是,在警报框被取消并且没有点击按钮后,progressdialog仍会显示。我一定是误解了您的意图。在显示进度对话框时,是否希望警报框保持在那里,并在“post comments”方法完成时让它们都关闭?我的问题有什么解决方案吗?您是否尝试过我更新的答案?如果我的回答有效,请接受。谢谢
pd = new ProgressDialog(NewsDetails.this);