2013-05-20 3 views
0

myButton을 클릭 할 때마다 숫자를 10 씩 줄이려고합니다. 그런 다음 단추가 0보다 작거나 같으면 메서드를 끝내기를 원합니다. 버튼을 실제로 클릭하면 숫자가 10만큼 줄어 듭니다.버튼을 여러 번 클릭 할 때까지 메서드 유지

지금은 무한 루프로 인해 스택 오버플로 오류가 발생합니다. (myMethod는 자신을 계속 호출합니다.) 숫자가 0보다 작거나 같을 때까지 메서드에 머물 수있는 방법은 무엇입니까? 예를 들어 number = 95 인 경우 myButton을 10 번 클릭 할 때까지 메소드에 머물러 있습니다. 그냥 분명히하기 위해서, 나는 문제가 무엇인지 알고있다. 나는 그것을 고치는 방법을 찾고있다.

public void myMethod(final int number) { 
    myButton.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      number -= 10; 
     } 
    }); 
    if(number > 0){ 
     myMethod(number); 
    } 
} 
+0

내가 유 원하는 게 무엇인지 설명 U that..can 할 필요성을 이해 해달라고보다 큰 있기 때문에 귀하의 경우에는

당신은 청취자 시간의 무한한 양을 설정하는? – bakriOnFire

+0

왜 그 방법에 머물러 있기를 원하십니까? 버튼을 클릭 할 때마다 콜백을 호출하고 숫자를 10 씩 줄이는 것이 더 좋지 않겠습니까? 그러면 0 이하가 될 때마다 무엇을 하든지 할 수 있습니까? – HexAndBugs

+0

다른 곳에서 실제로 버튼을 사용하고 있습니다. 이 단추가 이런 식으로 동작하는 유일한 시간은이 특정 메서드입니다. – Evorlor

답변

1

이것은 이벤트 구동 OS에서 프로그래밍하는 방법이 아닙니다. 버튼을 10 번 누르기 전까지는 다른 작업을하지 않으려면 앱의 다른 모든 기능을 사용하여 플래그가 허용되는지 확인하십시오. 그런 다음 onClick 함수는 number == 0 일 때 해당 플래그를 true로 설정합니다. 어떤 이유로 든 주 스레드를 들지 않으면 앱이 완전히 응답하지 않게되고 Android에서 몇 초 후에 앱이 중단됩니다. . 당신의에서 onCreate에서

+0

메소드 내의 다른 것들을 사용하고 싶습니다. 나는 6 개의 버튼을 가지고 있고, 일단이 방법이 입력되면, 6 개의 버튼 모두는 이전과 다른 것들을한다. 그런 다음 메서드가 종료되면 정상적인 작업을 다시 시작하기를 원합니다. – Evorlor

+1

상태 플래그를 사용하여 단추가 처리기에서 어떤 모드인지 확인해야합니다. 그런 방법으로 무한정 유지할 수는 없습니다. –

+0

! 고마워요 tho – Evorlor

0

사용이 :

myButton.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     if(number > 0) 
      number -= 10; 
     else 
      whateveryouwant(); 
    } 
}); 

당신은 한 번만 리스너를 설정해야합니다. 번호가 항상 0

+0

버튼이 관련없는 작업을 수행하고 특정 방법에있는 시간에만 변경하려는 경우 – Evorlor

+0

그리고? 문제가 무엇입니까? –

관련 문제