1.
//클래스이름이 없는 익명클래스의 인터페이스, 메소드도 정의만 되어있고 구현(implementation)이 안됨
//정의된 메소드의 내용을 채워주기를 기다린다는 의미에서 리스너
public interface View.onClickListener(){
public void onClick(View v);
}
2.
// 위에 정의한 인터페이스에 listner라는 클래스 이름을 주고 onClick메소드에 내용을 덮어써(override)구현
View.onclickListener listener = new View.OnClickListener(){
@Override
public void onClick(View v) {
drawer_Layout.openDrawer(drawer_view);
}
}
//listener이름을 준 클래스를 이벤트함수의 파라미터로 전달
btn_open.setOnClickListener(listener);
3.
//익명 클래스를 바로 이벤트함수의 파라미터로 전달
btn_open.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
drawer_Layout.openDrawer(drawer_view);
}
});
1.번의 인터페이스는 아래 책에서 출처된 글을 통해서 유추하여 내가 상상하여 만든 인터페이스
*아래글은 구글링결과 어느질문의 답변에서 어느 책의 내용으로부터 출처가 있는 글임
리스너(Listener)는 특정 이벤트를 처리하는 인터페이스이다. 이름 그대로 이벤트 발생 여부에 귀를 쫑긋 기울이고 있는 객체라고 할 수 있다. 리스너에 대응되는 이벤트를 받는 단 하나의 메서드가 선언되어 있으며 모두 View 클래스의 이너 인터페이스로 선언되어 있다. View 클래스의 내부 인터페이스로 OnCilckListener 인터페이스가 선언되고 있고 이 인터페이스는 onCLick라는 추상 메서드를 포함한다. 이 메서드를 이벤트 핸들러라고 부른다. 각 인터페이스에는 이벤트를 처리하는 추상메서드가 딱 하나씩만 선언되어 있고 구현은 없다. 인터페이스는 어디까지나 메서드의 껍데기만을 가진 선언체일 뿐이므로 그 자체가 이벤트를 받을 수는 없다. 다만 특정 이벤트를 처리하는 핸들러의 원형이 어떠해야 한다는 것을 강제할 뿐이다.
이벤트를 처리하려면 리스너를 구현하는 클래스를 선언하고 그 객체를 생성해야 한다. 클래스가 되려면 리스너의 추상 매서드인 핸들러를 구체적으로 구현해야 한다. 이렇게 구현된 객체를 리스너 객체라고 한다. 리스너를 구현한 다음에는 뷰에 이벤트가 발생핬을 떄 핸들러가 호출되도록 연결해야 한다. 구현만 해 놓는다고 해서 이벤트와 리스너가 자동으로 연결되는 것은 아니므로 어떤 리스너가 어떤 이벤트를 처리한다는 것을 등록해야한다. 등록 메서드는 리스너별로 따로 준비되어 있다.(set+리스너 등등)
인터페이스, 구현 등 정의 참조:www.charlezz.com/?p=768
'Java and Android > Android Java' 카테고리의 다른 글
Android- CustomNavigation (0) | 2020.11.24 |
---|---|
Android - WebView (0) | 2020.11.20 |
Android - SharedPreferences (0) | 2020.11.20 |
Android - ListView (0) | 2020.11.17 |
Android - ImageView, Toast MSG,gravity (0) | 2020.11.17 |