Android 在AlertDialog按钮上显示Progressdialog单击
我想在用户单击AlertDialog上的“Ok”按钮时显示ProgressDialog。但在我当前的代码中,ProgressDialog根本不显示。此外,单击按钮后,AlertDialog应关闭,并显示ProgressDialog。现在,单击按钮后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);
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);