我有一套方法,每种方法都需要时间来完成任务。
例如,
执行方法setRules()
后,
30
。 执行方法getLogs()
后,
60
。 执行方法getChartView()
后,
100
。 但是ProgressBar
增加到30
并且没有超出该范围,尽管我的所有方法都在执行。
代码 -
public class DialogPopup extends DialogFragment
{
private static int myProgress=0;
private ProgressBar progressBar;
private int progressStatus=0;
private Handler myHandler=new Handler();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
super.onCreateView(inflater, container, savedInstanceState);
view = inflater.inflate(R.layout.main,container, false);
progressBar = (ProgressBar) view.findViewById(R.id.progressBar1);
beginYourTask();
return view;
}
public void beginYourTask()
{
myProgress=0;
progressBar=(ProgressBar)view.findViewById(R.id.myProgress);
progressBar.setMax(100);
//progressBar.setVisibility(View.VISIBLE);
/*Do some work in background thread*/
new Thread(new Runnable()
{
@Override
public void run()
{
progressStatus=setRules();
myHandler.post(new Runnable()
{
public void run()
{
progressBar.setProgress(progressStatus);
}
});
progressStatus=getLogs();
myHandler.post(new Runnable()
{
public void run()
{
progressBar.setProgress(progressStatus);
}
});
progressStatus=getChartView();
myHandler.post(new Runnable()
{
public void run()
{
progressBar.setProgress(progressStatus);
}
});
/*Hides the Progress bar*/
myHandler.post(new Runnable()
{
@Override
public void run()
{
progressBar.setVisibility(View.GONE);
progressStatus=0;
myProgress=0;
}
});
}
private int setRules()
{
//Code here takes time
//set progress to 30
return 30;
}
private int getLogs()
{
//Code here takes time
//set progress to 60
return 60;
}
private int getChartView()
{
//Code here takes time
//set progress to 100
return 100;
}
}).start();
}
注意:
我从教程中android-progress-bar-horizontal获取了帮助来创建此类进度条。
答案 0 :(得分:1)
使用AsyncTask进行此类操作:
public void beginYourTask()
{
new AsyncTask<Void, Integer, Void>(){
@Override
public Void doInBackground(Void...params){
publishProgress(setRules());
publishProgress(getLogs());
publishProgress(getChartView());
return null;
}
@Override
public void onProgressUpdate(Integer... progress) {
progressBar.setProgress(progress[0]);
}
@Override
public void onPostExecute(Void result){
progressBar.setVisibility(View.GONE);
}
}.execute();
}
这个想法,可能存在错别字。
您的链接中的教程尚未更新一段时间,通常您不希望在这种情况下使用Thread
,因为AsyncTask
旨在帮助您免除使用Thread
在此阅读documentation,您就知道何时使用Thread
或AsyncTask