마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

버튼 클릭리스너 호출시, 왜 리스너안에 위젯정의를 할까요?

0 추천
 
에디터 박스에 글씨를 입력하고
버튼을 누르면 화면에 토스트로 간단하게 입력된 글씨를 보여주는건데요.
의문점이요. EditText  선언을  왜 Buttn 클릭리스너안에 해야 되는 이유가 몰까요?
 
버튼클릭리스너 바깥에 해도 되지 않나요? 궁금합니다 ~
 
 
@Override
public void onCreate(Bundle saveInstanceState)
 
 
  ,  ,   ,   ,   ,  
      Button btn = (Button)findViewById(R.id.bt);
 
      btn.setOnClickListener( new Button.onClickListener{
 
     public void onClick(View v)
      {
         EditText edit = (EditText)findViewById(R.id.edit);//왜 이안에 할까요?
 
 
 
    }
  });
 
}
엔조이AD (2,610 포인트) 님이 2015년 3월 17일 질문

2개의 답변

+2 추천
바깥에 하셔도 상관 없습니다.

하지만 전역으로 잡으시던지,  지역일경우는 final로 정의 하셔야 합니다.

여기 저기 자주 쓰일거 같은 view이면 전역으로 잡으시는게 좋고, onClick클릭에서만 사용하거면 안에다 하셔도 상관 없고,,

편하신데로 하시면 됩니다.
이드로이드 (22,930 포인트) 님이 2015년 3월 17일 답변
감사합니다.^^
제가 잘못된 습관으로 코딩을 하는지 착각했습니다
+2 추천
edit 를 final 로 선언하시거나 전역으로 선언하시면 굳이 클릭 리스너 안에서 안해줘도됩니당

 

안되는이유는,

Cannot fefer to a non-final variable edit inside an inner class defined in a different method

라고 나오네요.

클래스 내부의 다른메소드에서 정의된 파이널이 아닌 변수는 참조할수 없다..

라고..ㅋ
아시리 (8,400 포인트) 님이 2015년 3월 17일 답변
직접 테스트까지 해주시구 ㅠㅠ
감사합니다. 소스를 가져다 써도 이걸 왜 여기에 선언했는지
궁금증이 안풀리면 답답해 견딜수가 없어서 질문란에 올렸었습니다.
자세한 답변 감사합니다^^
...