Android에서 새로운 기능 ... 버튼을 클릭하여 이미지를 전환하는 앱을 개발했으며 Handler Runnable을 추가하여 이미지가 자동으로 전환되도록했습니다 (또한 버튼)의 지연 시간은 5000ms이다. 그러나 나는 버튼을 누른 순간에이 지연에 대한 핸들러를 중단해야하며 어떤 이유로이 작업을 수행 할 수 없습니다.postDelay에서 Runnable Handler를 멈추게 할 수있는 방법
public class MainActivity extends AppCompatActivity {
private Integer images[]={R.drawable.pic1, R.drawable.pic21, ....
public int currImage=0;
public int ThreadCnt = 0;
public boolean backInt=true,forwardInc=false, ThreadInc=true;
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
initializeImageSwitcher();
setInitialImage();
setImageRotateListener();
final Handler handler = new Handler();
final Runnable run = new Runnable() {
@Override
public void run() {
//forwardInc is a Boolean indicating that click button occurred
if(forwardInc){
//and in this case (of forwardInc=true) I want to stop runnable for 5sec
handler.removeCallbacks(this);
handler.postDelayed(this, 5000);
forwardInc=false;
setInitialImage();
setImageRotateListener();
currImage++;
ThreadCnt++;
}
handler.postDelayed(this, 5000);
}
};
handler.post(run);
이 버튼에 대한 코드 아직도 당신이 뭘 하려는지 분명하지 않다
public void setImageRotateListener() {
final Button rotatebutton=(Button) findViewById(R.id.btnRotateImage);
rotatebutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
currImage++;
//forwardInc indicating that click button occurred
forwardInc=true;
...
setCurrentImage();
...
전화'handler.removeCallbacks (실행)' Runnable을 취소하십시오. – CommonsWare
하지만 run() 메소드의 if 문에 이미 추가했습니다. handler.removeCallbacks (this); –
@CommonsWare하지만 run() 메소드의 if 문에 이미 추가했습니다. 'handler.removeCallbacks (this);' –