我有一个进度条,我不想合并一个数值来显示某些内容的加载。我只是希望ProgressBar出现,动画然后消失。
我用过:
public void buttonClick(View v){
ProgressBar mProgress=(ProgressBar)findViewById(R.id.my_progress);
mProgress.setVisibility(VISIBLE); //line 1..
//loading data from web... takes time
mProgress.setVisibility(INVISIBLE); //line 2..
}
但是当我运行此代码时,第1行和第2行都会执行,但之后UI会发生变化,这是不可取的。我想要在单击按钮时显示进度条,当从Web下载数据时,进度条应该消失。
我尝试从另一个线程设置可见性,但它不起作用,因为其他线程中不允许更改UI。
答案 0 :(得分:1)
您在AsyncTask中下载数据吗?把这段代码
private class DownloadData extends AsyncTask<Void, Void, Void>{
@Override
protected void onPreExecute() {
super.onPreExecute();
mProgress.setVisibility(View.VISIBLE);
}
@Override
protected Void doInBackground(Void... params) {
// download your data here
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
mProgress.setVisibility(View.GONE);
}
}
答案 1 :(得分:1)
使用AsyncTask
<强> MyTask.java 强>
class MyTask extends AsyncTask<Void, Void, Void> {
ProgressDialog dialog;
Context context;
MyTask(Context context){
this.context=context;
}
@Override
protected void onPreExecute() {
dialog=new ProgressDialog(context);
dialog.setMessage("Please wait...");
dialog.setIndeterminate(true);
dialog.setCancelable(false);
dialog.show();
}
@Override
protected Void doInBackground(Void... params) {
//do your task here
}
@Override
protected void onPostExecute(Void result) {
if(dialog.isShowing()){
dialog.dismiss();
}
}
}
您可以像这样开始任务:
public void buttonClick(View v){
new MyTask(YourActivity.this).execute();
}
您可以相应地修改AsyncTask
以检索结果。
希望它有所帮助。 :)