2017-05-02 35 views
-2

我試圖在再次單擊按鈕時手動停止線程處理程序。我無法在任何地方得到解決方案,請幫助。當按鈕再次被點擊時如何停止處理程序?

@Override 
public void onClick(View v) { 
    switch (v.getId()) 
    { 
     case R.id.black: 
      changecolor(); 
      Handler h = new Handler(); 
      h.postDelayed(new Runnable() { 

       @Override 
       public void run() { 

        black.setBackgroundResource(R.color.black); 
       } 
      }, 2000); 



      // h.removeCallbacksAndMessages(null); 
/*I want to stop the handler here. please help.*/ 

      black.setBackgroundResource(R.color.white); 

      break; 

     case R.id.blue: 
      changecolor(); 
      Handler h1 = new Handler(); 
      h1.postDelayed(new Runnable() { 

       @Override 
       public void run() { 

        blue.setBackgroundResource(R.color.blue); 
       } 
      }, 2000); 
      blue.setBackgroundResource(R.color.white); 
      break; 

     case R.id.green: 
      changecolor(); 
      Handler h2 = new Handler(); 
      h2.postDelayed(new Runnable() { 

       @Override 
       public void run() { 

        green.setBackgroundResource(R.color.green); 
       } 
      }, 2000); 
      green.setBackgroundResource(R.color.white); 

      break; 

     case R.id.red: 
      changecolor(); 
      Handler h3 = new Handler(); 
      h3.postDelayed(new Runnable() { 

       @Override 
       public void run() { 
        red.setBackgroundResource(R.color.red); 
       } 
      }, 2000); 
      red.setBackgroundResource(R.color.white); 

      break; 
    } 
} 
+0

使用handler.removeCallback() –

+0

使用handler.removeCallbacks(可運行); – Rajasekhar

+0

use handler.removeCallbacks(null) – Denny

回答

1

試試這種方法。

private Handler handler = new Handler(); 
private Runnable runnable = new Runnable() { 
     @Override 
     public void run() { 
      // Put your logic here 
     } 
    }; 

handler.postDelayed(runnable, INTERVAL_TIME); 

handler.removeCallbacks(runnable); 
相關問題