SW 배움터/안드로이드

안드로이드3: 이벤트 처리

kusson 2017. 4. 17. 17:06
반응형
728x170

이벤트 처리 방법 정리

 이벤트란 사용자가 키보드를 누르던지 마우스를 클릭한다던지 어떤 이벤트를 발생시키는

것을 말하는데 이벤트를 처리하는 방식은 크게 2가지가 존재한다. 하나는 애플리케이션이

무한 루프를 돌면서 사용자가 이벤트를 발생시킬 때까지 기다렸다가 사용자의 입력이

발생하면 이벤트를 처리하는 방식으로 폴링(Polling)방식이라 한다. 그러나 이 방식은 최악의

방식으로 CPU의 파워를 엄청나게 낭비하는 방식이기 때문에 지금은 거의 사용하지 않는다.

 그 다음 방식은 이벤트 구동(event-driven)방식이 있는데 이 방식은 애플리케이션이

다른 일을 하고 있다가 이벤트가 발생하면 그 이벤트를 처리하는 방식으로 지금은 대부분의

애플리케이션이 이 방식을 이용한다. 이 방식중 많이 사용하는 두가지 방식을 소개한다.

 

 

1. 뷰 클래스의 이벤트처리 메소드를 재정의 하는 방법.

 1) 사용자가 키보드를 누를 경우 onkeyDown( )onDraw( ) 메소드를 재정의하여

   키이벤트를 처리한다.

  ex) class AAA extends View {

       ....................

       boolean onKeyDown( ) {                    //onKeyDown 메소드 재정의.

       ....................

        }

      }

    ※자신만의 뷰를 작성하는 경우에만 사용한다. 반드시 view클래스를 상속받아야 한다.

 

2. 이벤트 처리 객체를 생성하여 이벤트를 처리하는 방법으로 이 방식이 일반적이다.

 이 방식은 이벤트 리스너를 구현하는 클래스를 정의하고 이 클래스의 객체를 생성하여 위젯에 등록하고 콜백메소드를 호출해야 한다.

 먼저 이벤트리스너의 종류를 알아보겠다. 아래의 3개 외에도 여러가지가 있는데 3개가 가장

 많이 쓰인다.

 

       리스너                                    콜백 메소드

  View.OnClickListener                        onClick( )

  View.OnKeyListener                         onKey( )

  View.OnTouchListener                      onTouch( )

 

이벤트 처리 객체를 생성하여 이벤트를 처리하는 방식에는 3가지 종류가 있는데 다음과 같다.

    1) 리스너 클래스를 내부클래스로 처리하는 방법.

       내부 클래스란 클래스 안에 정의된 클래스를 의미한다. 내부 클래스는 자신이 속해있는

      클래스의 멤버들에게 자유롭게 접근하여 사용할 수 있는 장점이 있다.

        ex) public class AAA extends BBB {

               class CCC implements OnClickListener{

                 public void onClick(View v){

                             ........

                  }

                };

                            

           @Override

             public void onCreate(Bundle savedInstanceState) {

                 super.onCreate(savedInstanceState);

                            ..........

                 Listener lis = new Listener( );

                 button.setOnClickListener(lis);

                }

              };

 

  2) 리스너 클래스를 무명클래스로 정의하는 방법.

     무명클래스는 클래스가 딱 한번만 사용될 경우에 사용되고 클래스에 이름을 붙일 필요도

    없다. 객체도 이름이 없는 임시 객체로 만들어 쓰는 방식이 사용된다.

      ex) button.setOnClickListener(new OnClickListener( ) {   

           public void onClick(View v){

                             ..........

             )

            }

           };        

 

       ※무명 클래스는 정의하면서 동시에 객체를 생성하게 된다. 무명클래스는 이름이 없기    

         문에 한 번만 사용이 가능하다. 무명 클래스는 코드의 양을 줄일 수 있는 장점이 있다.

        ex) new 부모_클래스_또는_인터페이스( ) { 클래스 몸체 } 

                      

  3) 리스너 인터페이스를 액티비티 클래스에 구현하는 방법.

     액티비티 클래스에 인터페이스를 구현한다면 이벤트를 처리할 클래스를 새로 작성할

     필요가 없다.

      ex) public class AAA extends Activity implements OnClickListener{

                             .............

           button.setOnClickListener(this);  // 버튼의 클릭 이벤트를 현재의 액티비티가

                                                     // 처리하겠다고 버튼에 등록한다.

           }

 

           public void onClick(View v) {

                     ................

            }

          }

 

3. XML을 이용하는 방법.

   XML 파일에서 속성 onClick에 이벤트를 처리하는 메소드 이름을 적어준다.

        < Button

                 ...

           android:onClick = "myClickListener"

                 .

                 .

             />

 

  다음 자음 자바 파일을 다음과 같이 변경한다.

            public void myClickListener(View target)

            {

              .............

            }

 

 

반응형
그리드형