2015-11-23 62 views
1

我已閱讀關於停止Runnnable的其他帖子;我很新。如何在程序中停止runnable

我想要一個自定義視圖繪製一個矩形,等一下,然後再繪製一個。爲了弄清楚Runnables是如何工作的,我正在閱讀所有我可以使用Toast來查看重複動作的次數。

我已經得到了一個簡單的工作,如果我通過點擊按鈕或滑動滑塊來停止它。 HOwever,我希望它自己停止。

h = new Handler(); 
// assorted details -- I'm using a Slider for user input. 

public void onStopTrackingTouch (SeekBar firstSlider){ 
       if(((addend1 > 0) && (addend2<0))||(addend1<0&&addend2>0)) 
       {     
      h.post(shrink); 
       } 
      } 
     }); 

private Runnable shrink = new Runnable(){ 
     @Override 
     public void run() {    
for (int j = 0; j < 4; j++){ 
    Toast.makeText(getApplicationContext(), "Subtract!", Toast.LENGTH_SHORT).show(); 
    tempadd++; 
Log.i("WatchAnimActivity", "tempadd is " + tempadd); 
    checkTemp(); 
    h.postDelayed(shrink, 18000); 
} 
    }}; 

public void checkTemp() 
{ 
    if (tempadd >= 2) 
    Log.i("WatchAnimActivity", "tempadd in Check Temp is " + tempadd); 

    h.removeCallbacks(shrink);} 
} 

我也試過這樣:

public void checkTemp({ h.removeCallbacks(shrink); } 

我無法理解爲什麼Android的似乎是在做「checkTemp」但是......不會刪除回調。停止時,我將第二個SLider設置爲h.removeCallbacks(縮小),並且工作正常。爲什麼它不能h.removeCallbacks,即使它承認tempadd是'方式超過兩個?

希望能在這裏一跛的語法錯誤新手...

回答

1

這是因爲你在呼喚checkTemp()和刪除回調,然後立即再次發佈的收縮對象時checkTemp()回報。

+0

謝謝! (新手序列err0r)...一旦我添加條件回來,它表現很好。 – geonz