2011-10-15 3 views
1

내가 사용했을 때 나는 같은 것을 할라는 명령을 추가하는 경우에만 작동 OnTouchListener :OnTouchListener 이상한 버그

tv.setText를 (""); 예를 들어

: 당신이 tv.setText("");을 말한다 행을 제거 할 경우

drawView.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent ev) { 
       tv.setText(""); 
       int x = ev.getX(); 

       return true; 
      } 
     }); 

, 그것은 작동하지 않습니다 .. 어떤 아이디어?

+0

무엇이 작동하지 않습니까? 로깅을 추가했거나 중단 점을 설정하여 현재 진행중인 작업을 확인 했습니까? – spatulamania

+0

왜 작동해야합니까, 작동하지 않습니다, 먼저 원하는 것을 명확히합니까? –

답변

0

프로그램의 흐름이 onTouch에 입력되면 전체 메서드가 실행됩니다. 플로우는 메소드의 닫기 괄호에 도달하거나 return 문을 찾을 때까지 명령문을 계속 실행합니다 (이 경우 true/false를 리턴해야합니다). whne을 제외하면 예외를 생성하는 정상적인 흐름이 중단되고 예외가 발생하는 버그가 있습니다.

public boolean onTouch(View v, MotionEvent ev) { 
       tv.setText(""); 
       int x = ev.getX(); 

       return true; 
      } 

내가 말하고자하는 모든 것은 tv.setText (""); 그런 다음 int x = ev.getX(); 또한 실행됩니다.

이것은 작은 문제를 실현하기 위해 저격하지만 다른 사람의 코드에서 x 변수를 읽으려고한다고 생각합니다. 또한 x 변수가 값을 변경하도록 전역 x 변수를 정의했습니다. 자, onTouch에서 동일한 이름 x를 가진 또 다른 var를 생성하면 전역 변수가 아닌 로컬 변수의 값이 변경됩니다. 이것을 Log.v ("local var", "x ="+ x);로 확인할 수 있습니다.