0
プログレスバーをコーディングしようとしています。これは、タイマーによって増加します(0から開始し、選択した特定の時間までになります)。 ボタンをクリックすると、進捗バーが下がります(値[0] - 5から減少します)。 プログレスバーの値が30の場合は、プログレスバーを停止したいので、asynctaskを停止して、プログレスバーの値が0になるように再起動してください。AsynctaskはdoInBackgroundでキャンセルした後で停止しません。
私のコードはエラーがありません。プログレスバーは停止せず、再起動しません。これは
パブリッククラスMainActivityアクティビティ{
ProgressBar progressBar_eau;
TextView txt;
int compteur = 0;
Button btn_arrosoir;
MyTask task_eau;
Boolean restart = true;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_arrosoir = (Button) findViewById(R.id.btn_arrosoir);//my button when you click the progress bar decreases
progressBar_eau = (ProgressBar) findViewById(R.id.barre_eau);
progressBar_eau.setMax(30);
Drawable draw3=getResources().getDrawable(R.drawable.custom_eau);
progressBar_eau.setProgressDrawable(draw3);
progressBar_eau.setProgress(0);
task_eau = new MyTask(progressBar_eau);
task_eau.execute(300);
btn_arrosoir.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//OnCLick Stuff
compteur = compteur - 5;
}
});
}
public void cancelAsynctask(){
if (restart == false){
task_eau.cancel(true);
restartAsynctask();
Toast.makeText(MainActivity.this,
"cancel", Toast.LENGTH_LONG).show();
restart = true;
}
}
public void restartAsynctask(){
task_eau = new MyTask(progressBar_lumiere);
task_eau.execute(300);
Toast.makeText(MainActivity.this,
"restart", Toast.LENGTH_LONG).show();//my emulator shows both message start and restart even though the progress bar doesn't stop
}
public class MyTask extends AsyncTask<Integer, Integer, String> {
ProgressBar progressBar_actuelle;
public MyTask(ProgressBar target) {
progressBar_actuelle = target;
}
@Override
protected String doInBackground(Integer... params) {
while (task_eau.isCancelled() == false){
for (; count <= params[0]; count++) {
try {
Thread.sleep(1000);
publishProgress(count);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
return null;
}
@Override
protected void onPostExecute(String result) {
}
@Override
protected void onProgressUpdate(Integer... values) {
progressBar_actuelle.setProgress(values[0]+compteur);
if (progressBar_actuelle.getProgress() >= 30){
restart = false;
cancelAsynctask();
}
}
}
を拡張MainActivityの私のコードは
です(私はTOASTを作ったので、プログレスバーの値を印刷することを知って、それは決して停止しません) }
ありがとうございました!私がAsynctaskでprogressBarを宣言したのは、後で3つの異なるプログレスバーを使用したいからです。これは、異なる時間内にすべてを減らすためです。だから私はそれぞれ別々に電話したいと思う。プログレスバーを却下したわけではありませんが、どうすればいいですか? –
実際には、最後にasynctaskが停止したときにプログレスバーを消したくないので、プログレスバーが再起動するように再起動します。 –