我想在我的应用中创建一个进度对话框,以便在发送一些信息时使用。但是我写的代码不起作用。方法send()执行但对话框永远不会出现,因为它很快就会解散
这是我的代码:
ProgressDialog myProgressDialog = ProgressDialog.show(Tents.this,
"Please wait...", "Sending...", true);
send();
myProgressDialog.dismiss();
goFour();
如何让对话框持续一段时间?
答案 0 :(得分:2)
你可能正在获得一个进度对话框,但是由于没有什么值得等待而立即解除它。
我假装你想在OnCreate中想要这个例子:
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ProgressDialog pd = ProgressDialog.show(this, "Please wait...", "Sending...");
new Thread(new Runnable(){
public void run() {
send();
pd.dismiss();
}
}).start();
gofour();
}
编辑:如果它仍然立即消失,请确保send();
执行实际需要一些时间的事情。 ;)
答案 1 :(得分:2)
首先 - 你不应该在与show()和dismiss()相同的线程中执行send() - 因为你在发送过程中有效地阻止了UI线程。该对话框实际上永远不会显示 - 因为为了在调用show()之后显示它,您需要将控件返回到UI线程中的主循环器,并简单地完成处理您正在处理的任何事件。否则,UI线程永远不会有机会绘制对话框。
最好的想法是在AsyncTask中开始运行send()并在onPostExecute()中调用dismiss()(请参阅http://developer.android.com/reference/android/os/AsyncTask.html以了解如何运行异步任务)。
答案 2 :(得分:0)
UI线程用于启动send(),这将不起作用,并且不会显示进度对话框。 在另一个线程或AsynTask doBackground中调用send,并在完成时关闭该对话框。
答案 3 :(得分:0)
如果您的发送操作快速完成以至于对话框无法正常显示,我建议您通过requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS)
使用活动右上角的不确定进度条,然后使用setProgressBarIndeterminateVisibility(true/false)
答案 4 :(得分:0)
“我想我真正的问题是如何才能让它持续一段时间?”我的回答是为什么??? !!!
我认为您最好显示一个警告对话框以确认您的发送功能已经完成,对于用户必须无缘无故地等待会很烦人!