안드로이드 이벤트 처리방법

12 4월

1. callback 함수 재정의

이벤트를 받는 가장 쉬운 방법은 해당 클래스를 상속받아 callback 함수를 재정의 하는것이다.

callback 함수는 특정 이벤트가 발생했을때 시스템에 의해 자동으로 호출되는 함수이며 발생한 이벤트에 대한 상세 정보가 인수로 전달된다.  ( 예) 사용자가 화면을 터치했을경우 : 눌러진 좌표)

이 함수에 원하는 코드를 작성하면 된다.

대표적인 callback 함수 목록 – onTauchEvent(사용자가 화면을 터치 했을시), onKeyDown(사용자가 키를 눌렀을시), onKeyUp(사용자가 키에서 놨을시)등

예제)

tests

결과 화면

_JOI32~Z

이 방법은 간단하게 사용할수 있어 편의성이 좋으나 몇가지 단점이 존재하고 있다.

1) 함수를 재정의 하기 위해서 반드시 슈퍼 클래스를 상속 받아야 한다는 것이다. 위의 예제에서 보면 onTouchEvent를 재정의 하기 위해 View class를 상속받은 MyView class가 필요로 했다.

2) 자주 발생하는 일반적인 이벤트에 대해서는 callback함수를 프레임워크에서 제공하나 드래그, 진동 센서등 callback함수를 제공하지 않는 이벤트도 많다.

2. listener interface 구현

listener는 특정 이벤트를 처리하는 interface 이다.  View class의 inner interface로 정의되어 있으며 대응되는 이벤트를 받는 한개의 함수가 선언되어 있다.

예 ) OnTouchListener : onTouch, OnKeyListener : onKey, ….

이벤트를 처리하려면 listener을 구현하는 클래스를 선언하고 내부의 함수를 구체적으로 구현해야한다. 구현한후 자동으로 이벤트와 listener가 자동으로 연결되는것은 아니므로 어떤 listener가 어떤 이벤트를 처리한다는 것을 등록해야 한다.

예) OnTouchListener : setOnTouchListener, OnKeyListener : setOnKeyListener, …

예제)

testl

이 listener는 누가 구현할 것인가에 대해서는 아무 제약도 없으므로 액티비티나 뷰가 직접 구현 해도 된다

예) 액티비티가 구현하는 경우

testal

예) 뷰가 구현하는 경우

testvl

3.  anonymous inner class 사용

이 방법은 2번 방법과 마찬가지로 listener을 사용하는 방법이기는 하나  2번 방법을 더 간단하게 구현한 방법이다. 2번방법이 listener 한개를 위해 클래스를 한개 선언해야 한다는 번거로움이 있다. 만약 listener가 여러개로 늘어난다면 그에 따른 클래스도 여러개로 늘어나야 한다.

자바의 경우는 이런 경우를 위해 anonymous inner class라는 문법을 제공한다. 상위 클래스나 인터페이스의 함수 한개를 재정의 하기 위해 클래서를 선언하는 경우, 그리고 그 클래스의 객체가 단 한개만 필요한 경우 굳이 클래스를 선언할 필요가 없이 상속과 재정의를 동시에 할수 있다.

예제)

testiic

이 anonymous inner class를 특정 뷰에대한 이벤트 핸들러로만 쓸경우는 임시객체를 이용 더욱 축약 할수 있다.

예제)

testiicc

출처 : 안드로이드 프로그래밍 정복 : chapter 06 입력 (저 김상형)

 

광고

답글 남기기

댓글을 게시하려면 다음의 방법 중 하나를 사용하여 로그인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중

%d 블로거가 이것을 좋아합니다: