2017-03-08 13 views
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を作ったので、プログレスバーの値を印刷することを知って、それは決して停止しません) }

答えて

0

問題は、AsyncTask.Removeで宣言されているプログレスバーがonCreateメソッドで作成されたプログレスバーオブジェクトを直接使用していると思います。コード内のどの時点でもプログレスバーを外していないことがわかりました。それも調べてみてください。

+0

ありがとうございました!私がAsynctaskでprogressBarを宣言したのは、後で3つの異なるプログレスバーを使用したいからです。これは、異なる時間内にすべてを減らすためです。だから私はそれぞれ別々に電話したいと思う。プログレスバーを却下したわけではありませんが、どうすればいいですか? –

+0

実際には、最後にasynctaskが停止したときにプログレスバーを消したくないので、プログレスバーが再起動するように再起動します。 –

関連する問題