맨날 까먹어 책 찾아 보고.. 인터넷 뒤져보고.. 해서 이 기회에 버튼에 대한 클릭 이벤트 핸들러 코드를 작성하는 것에 대해 정리를 해 놔야겠습니다. 머리가 나쁘니.. 손이 좀 고생을 해야겠지요..
레이아웃에 두개의 버튼이 있다고 가정하겠습니다. id는 각각 viewMode, editMode라고 하면.. 클릭 이벤트에 대한 핸들러 코드를 작성하는 방법에는 2가지가 있습니다. 물론 따져보면 둘다 동일한 방식이기는 하지만 코드 모냥새가 다르므로 다르다고 치겠습니다.
첫번째 방식입니다. 다수의 버튼들에 대한 이벤트 코드를 한자리에 가족같은 분위기로 다스리는 치국평천하 방식이라고 할 수 있겠습니다..
@Override public void onCreate(Bundle savedInstanceState) { findViewById(R.id.viewMode).setOnClickListener(btnClickListener); findViewById(R.id.editMode).setOnClickListener(btnClickListener); } private Button.OnClickListener btnClickListener = new View.OnClickListener() { @Override public void onClick(View v) { switch(v.getId()) { case R.id.viewMode: map.setMouseMode(MouseMode.MapViewMode); break; case R.id.editMode: map.setMouseMode(MouseMode.EditMode); break; } } };
두번째 방식입니다. 이 방식은 각 버튼마다 이벤트 처리 코드를 따라 분리해 두는 방식입니다.
@Override public void onCreate(Bundle savedInstanceState) { .... findViewById(R.id.viewMode).setOnClickListener( new Button.OnClickListener() { @Override public void onClick(View v) { map.setMouseMode(MouseMode.MapViewMode); } } ); findViewById(R.id.editMode).setOnClickListener( new Button.OnClickListener() { @Override public void onClick(View v) { map.setMouseMode(MouseMode.EditMode); } } ); .... }
앞서도 말씀드렸지만.. 첫번째나 두번째나 결국 똑 같은 방식입니다..
세번째 방식은 상당히 직관적인 것으로 생각되는데요. 레이아웃을 정의하는 XML에서 터치 이벤트 함수명을 지정하고 간단히 소스코드에서 해당 이벤트 함수를 추가해 주기만 하면 됩니다. 예를 들어서 레이아웃을 정의하는 XML 중 버튼 부분만을 보면..
위의 버튼에 대한 터치 이벤트 함수인 onClickButton은 아래처럼, 해당 뷰를 사용하는 엑티비트의 구현부에 추가하면 됩니다.
public void onClickButton(View v) { // 직관적이닷! }
안녕하세요 OpenGl관련 강좌를 보다 들어온 방문자입니다.
유용한 자료 올려주셔서 너무나 감사드립니다.
이벤트 등록하는 방법중 한가지가 더 있어서 말씀드려볼까 글을 남깁니다
xml의 버튼의 프로퍼티중 onClick이라는 항목이 있습니다.
이부분에 클릭이벤트의 메소드명 (ex:btnClickListener)를 넣으시고
id로 구분하시면 버튼의 이벤트를 등록하지 않아도 되는 방법이 있습니다.
여러가지 뷰에 이벤트를 걸때 하나씩 이벤트를 등록해줘야 하는데 xml로 한꺼번에 선택하여 등록해주면 편리 합니다. 이상입니다.
좋은 정보 감사합니다. xml에서 바로 이벤트를 등록하는 방식은 처음 알았답니다. ^^
gis프로그래밍관련 메일드렸습니다 ! ㅠㅠ 답변 꼭 부탁드립니다.