2017-06-22 188 views
0

我正在使用兩個按鈕... 1是慢的,其他是慢...當我點擊其中一個按鈕,它工作正常...現在,當我點擊另一方面按鈕,前面是同時運行的功能...我想要的(這已經在運行),停在點擊第二個方法......我想停止按鈕點擊功能

slow.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      setVisibilityslow1(); 
     } 
    }); 

slower.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      setVisibilityslower1(); 

     } 
    }); 

} 

private void setVisibilityslow1() { 

    tv1.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      setVisibilityslow2(); 
     } 
    }, 500); 
} 

private void setVisibilityslow2() { 

    tv1.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      setVisibilityslow1(); 
     } 
    }, 500); 
} 

private void setVisibilityslower1() { 

    tv1.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      setVisibilityslower2(); 
     } 
    }, 1000); 
} 

private void setVisibilityslower2() { 

    tv1.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      setVisibilityslower1(); 
     } 
    }, 1000); 
} 
+0

檢查我的更新答案 –

回答

1

通常,你想避免關閉線程。有時間是需要和必要的。

而不是使用匿名類,你可以

public class MyRunnable implements Runnable { 
private volatile boolean shutdown; 
public void run() { 
    while (!shutdown) { 
     ... 
    } 
} 
public void shutdown() { 
    shutdown = true; 
    } 
} 

然後在其上運行關機。

0

在這裏你可以實現你想要使用下面

這段代碼首先初始化這一點邊的的onCreate

private Handler visiablityHandler; 
private Runnable mySlowRunnable; 

,然後用這個

 visiablityHandler = new Handler(); 

     slow.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       setVisibilityslowAndSlower(500); 
      } 
     }); 

     slower.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       setVisibilityslowAndSlower(1000); 
      } 
     }); 
} 
    private void setVisibilityslowAndSlower(final int delayMillis) { 
     if(mySlowRunnable != null) 
      visiablityHandler.removeCallbacks(mySlowRunnable); 

     mySlowRunnable = new Runnable() { 
      public void run() { 
       //here you can put what you want to do with your tv1 
       visiablityHandler.postDelayed(this , delayMillis); 
      } 
     }; 
     visiablityHandler.post(mySlowRunnable); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 

     if(mySlowRunnable != null) 
      visiablityHandler.removeCallbacks(mySlowRunnable); 
    } 

希望更換你的什麼這可以幫助你,讓我知道如果它沒有幫助

+0

我想第一個按鈕菲尼在點擊第二個按鈕的過程中......因爲我在另一個函數內部調用了一個函數,並且它們運行了無限的時間......所以我的動機是停止單擊另一個按鈕的功能...... – Alex

+0

它我會更清楚如果你可以幫我,我應該在我的代碼中添加你的代碼...謝謝你... – Alex

+0

aha ..好吧我想知道我現在更新我的答案 –

0

您可以使用此行代碼來阻止你的線程:

tv1.removeCallbacksAndMessages(null); // where tv1 is your Handler 

如果不爲你工作,那麼你可以停止特定的線程,就像如果你正在運行的線程是這樣的:

Handler handler= new Handler() 
Runnable myRunnable = new Runnable() { 
public void run() { 
// do something 
} 
}; 
handler.postDelayed(myRunnable); 

然後你就可以像這樣停止它:

handler.removeCallbacks(myRunnable); 
+0

因爲我是初學者,我面臨這個問題.. 。對我來說,如果你能夠幫助我,我應該在哪裏添加你的代碼給我的代碼,謝謝你.. – Alex

+0

告訴我一件事,什麼是「tv1」?這是一個處理程序還是一個textview? –

+0

tv1是一個textview ... – Alex