Download presentation
Presentation is loading. Please wait.
Published by일섭 서 Modified 8년 전
1
이벤트 처리 GUI 운영체제는 이벤트 드리븐으로 동작한다. 사용자와 상호 작용하려면 이벤트를 매끄럽게 처리하는 기술이 필요하다. 안드로이드에는 이벤트를 처리하는 다양한 방법이 있다. 팀 작업을 위해 모든 방법을 숙지해야 하며 자바의 고급 문법이 사용된다.
2
EventListener 리스너 (Listener) : 이벤트를 처리하는 범용적인 방법 리스너 등록 메서드 : set 리스너 - void setOnTouchListener (View.OnTouchListener l) - void setOnKeyListener (View.OnKeyListener l) - void setOnClickListener (View.OnClickListener l) - void setOnLongClickListener (View.OnLongClickListener l) - void setOnFocusChangeListener (View.OnFocusChangeListener l) 인터페이스 구현, 리스너 객체 생성, 이벤트와 연결 과정을 거쳐 사용
3
EventListener 구현 인터페이스는 임의의 클래스가 구현할 수 있다. 액티비티가 구현 : 코드는 짧아지지만 구조적으로 바람직하지 못하며 뷰의 독립성이 떨어진다. 뷰가 구현 : 인터페이스 구현을 위해 상속을 받아야 하는 문제가 있다. 두 방법은 특정한 조건이 만족될 때만 사용하는 것이 바람직하다.
4
EventListener 구현 이벤트 연결 방법 View.setOnClickListener(OnClickListener clickListener) View.setOnTouchListener(OnTouchListener touchListener) View.setOnLongClickListener(OnLongClickListener longClickListener) 사용 예 1) View.setOnClickListener(clickListener); ClickListenerClass clickListener = new ClickListenerClass(); class ClickListenerClass clickListener implements OnClickListener { @Override public void onClick(View view) { // 클릭시 동작 정의 }
5
EventListener 구현 사용 예 2) public class MainActivity extends Activity implements OnClickListener @Override protected void onCreate(Bundle savedInstanceState) {.... 생략 View.setOnClickListener(this);.... 생략 } @Override public void onClick(View v) { // 클릭시 동작 정의 }
6
EventListener 구현 – 콜백 메소드 재정의 사용하려는 뷰 클래스를 상속받아서 콜백 메소드를 재정의하는 방법 단점 - 메소드를 재정의 하기 위해서 반드시 클래스를 상속받아야 함 - 안드로이드에서 제공하는 표준 위젯을 그대로 사용하지 못하고 항상 수정하는 작업을 한단계 더 거쳐야 함 장점 - 위젯 자체에 이벤트 정의가 되어 있으므로 잘 만들어 놓으면 업무 효율 상승
7
EventListener 구현 – 콜백 메소드 재정의 사용하려는 뷰 클래스를 상속받아서 콜백 메소드를 재정의하는 방법
8
EventListener 구현 – 인터페이스 구현 1 별도의 클래스를 만든 후 리스너 인터페이스를 구현하는 방법
9
EventListener 구현 – 인터페이스 구현 2 액티비티가 직접 리스너 인터페이스를 구현
10
EventListener 구현 – 익명 InnerClass 1 익명 이너 클래스 문법을 활용하여 리스너 클래스 선언을 생략하는 방법 객체 생성이 한번만 가능함 ( 객체가 생성되면서 코드가 정의됨 ) 코드가 짧아지고 간결함
11
EventListener 구현 – 익명 InnerClass 2 익명 이너 클래스 문법을 활용하여 리스너 클래스 선언을 생략하는 방법 객체 생성이 한번만 가능함 ( 객체가 생성되면서 코드가 정의됨 ) 코드가 짧아지고 간결함
12
EventHandler 우선 순위 하나의 이벤트를 여러 객체에서 처리할 수 있다. 중복 정의되어 있을 경우 우선 순위에 따라 호출된다. 좁은 범위일수록 우선 순위가 높다. 리턴값으로 다음 순위의 핸들러 호출 여부를 결정한다.
13
외부 변수 액세스 이너 클래스는 외부 클래스의 멤버를 참조할 수 있다. 핸들러로 전달할 값을 멤버로 선언하는 것은 구조적으로 바람직하지 않다. 지역 변수를 핸들러로 전달할 때는 반드시 final 로 선언해야 한다. 전달받은 인수를 핸들러로 전달할 때는 final 로 사본을 복사한 후 사용하거나 인수를 final 로 선언한다.
14
외부 변수 액세스 // 멤버변수 사용
15
터치 입력 손가락으로 화면을 누를 때 발생한다. - boolean onTouchEvent (MotionEvent event) - boolean onTouch (View v, MotionEvent event) 콜백에 비해 리스너는 이벤트 대상 뷰를 인수로 전달받는다. getAction : 화면에서 어떤 동작을 했는지를 전달한다. getX, getY : 터치한 좌표
16
키보드 입력 키보드 또는 화면 키보드를 눌렀을 때 발생한다. - boolean onKeyDown (int keyCode, KeyEvent event) - boolean onKey (View v, int keyCode, KeyEvent event) 인수로 키코드와 액션이 전달된다. 키보드만으로 동작하는 앱을 만들어서는 안된다.
17
클릭 이벤트 콜백은 없으며 View.OnClickListener 리스너로 이벤트를 받아야 한다. 클릭시 다음 메서드가 호출된다. - void onClick (View v) 비슷한 핸들러는 하나로 통합한다. 임시 객체를 사용할 수 없으며 이름이 있어야 한다. 공유 핸들러는 리스너의 getId 메서드로 클릭된 버튼을 알아낸다. XML 리소스의 onClick 속성으로 핸들러 메서드를 지정할 수 있다.
18
롱클릭 이벤트 누른 채로 일정 시간을 대기할 때 발생한다. 리스너로 처리한다. - void setOnLongClickListener (View.OnLongClickListener l) - boolean onLongClick (View v) 클릭과 유사하되 리턴값으로 클릭 이벤트 발생 여부를 통제한다. true 를 리턴하면 처리를 끝낸다. false 를 리턴하면 클릭 이벤트가 추가로 발생한다. 리턴값은 프로그램의 논리에 따라 달라진다. 롱클릭은 명령을 숨겨놓을 수 있는 수단이지만 별도의 설명이 필요하다는 면에서 비직관적이다.
19
포커스 관리 포커스를 가진 뷰는 다른 색으로 강조된다. 터치 모드에서는 포커스 표시가 생략된다. 터치 모드는 시스템이 관리하며 사용자에 의해서만 바뀔 뿐 코드에서는 변 경할 수 없다. 포커스 가능 여부는 속성이나 메서드로 지정한다. 포커스 순서를 속성으로 임의 지정 가능하다.
Similar presentations