在我的应用程序中,点击一个按钮,应用程序会进行一些处理,通过网络发送一些数据然后停止。由于需要一些时间,我试着加入进度条。进度条的代码位于按钮的onclick侦听器的开头。在进度条形码之后,通过网络处理和发送数据。 但进度条根本不可见。我是否需要在单独的帖子中显示进度条?
这是我用来显示进度条的内容
final ProgressDialog pd=new ProgressDialog(this);
pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
pd.setMessage("Please wait..");
pd.setCancelable(true);
pd.setIndeterminate(true);
pd.show();
答案 0 :(得分:5)
使用用于在后台进行处理的AsyncTask类,你也可以在那里显示你的进度条
以下是AsyncTask的简单代码片段
class BackgroundProcess extends AsyncTask<Void,Void,Void>{
private ProgressDialog progress;
public doInBackground(Void...arg){
publishProgress();
// do your processing here like sending data or downloading etc.
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
progress = ProgressDialog.show(YourActivity.this, "", "Wait...");
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
if(progress!=null)
progress.dismiss();
progress = null;
}
}
现在在按钮onclick listener中初始化并执行它,就像这样
new BackgroundProcess().execute();
现在progressdialog将被发布并显示在屏幕上,当进程完成后,然后从onPostExecute()中解除进度对话框
答案 1 :(得分:0)
我将您的代码粘贴到我的应用程序中,它运行得很好。你是从UI线程调用所有这些吗?如果您正在进行一些繁重的处理和数据传输,请确保不要在UI线程上运行它。制作AsyncTask来处理网络内容。
编辑:我将它移动到自己的线程中,它不再有效,所以请确保从UI线程中调用它。