티스토리 뷰
안녕하세요.
오늘은 안드로이드 OnClickListener를 사용하는 여러 가지 방법에 대해 알아보겠습니다.
( OnClickListener를 처음 접하시는 분은 적합하지 않은 글입니다. )
안드로이드에서는 여러 방법으로 OnClickListener를 사용할 수 있습니다.
1. 익명 클래스
click 이벤트가 어디서 처리되는지 쉽게 확인할 수 있고, 코드가 간결하기 때문에 자주 사용된다.
-
이벤트가 일어나는 view(Button 등)의 개수가 적거나, 이벤트가 일어나는 view 간의 연관성이 적은 경우
-
이벤트 핸들러 함수 내에서 익명 클래스 외부의 변수를 참조하지 않는 경우
-
간단한 view 클릭 이벤트 테스트 코드를 작성하는 경우
Button btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 동작
}
});
2. 익명 클래스 객체
1번 방법과는 다르게 익명 클래스 객체를 매번 생성하지 않는다.
-
Button이 여러 개이고 Button 간의 연관성이 많은 경우
-
이벤트 핸들러 함수 내에서 익명 클래스 외부의 변수를 참조하지 않는 경우 (1번과 동일)
-
나중에 다른 Button을 추가하여 사용할 가능성이 높은 경우
Button btn1 = (Button) findViewById(R.id.btn1);
btn1.setOnClickListener(click);
Button btn2 = (Button) findViewById(R.id.btn2);
btn2.setOnClickListener(click);
View.OnClickListener click = new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn1:
// btn1 동작
break;
case R.id.btn2:
// btn2 동작
break;
}
}
};
3. Listener 인터페이스를 implements 하는 Listener 클래스
이름이 부여된 Listener 클래스가 만들어짐으로써 이벤트가 어디서 처리되는지 명확하게 구분할 수 있다.
-
Listener 인터페이스를 상속함으로써 가독성을 높이고 싶은 경우
-
나중에 다른 view를 추가하여 사용할 가능성이 높은 경우 (2번과 동일)
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
BtnOnClick btnOnClick= = new BtnOnClick();
Button btn1 = (Button) findViewById(R.id.btn1);
btn1.setOnClickListener(btnOnClick);
Button btn2 = (Button) findViewById(R.id.btn2);
btn2.setOnClickListener(btnOnClick);
}
// 클래스를 따로 생성하여 이벤트 리스너 상속
class BtnOnClick implements View.OnClickListener {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn1:
// btn1 동작
break;
case R.id.btn2:
// btn2 동작
break;
}
}
}
}
4. Listener 인터페이스를 implements 하는 activity
-
이벤트 핸들러 함수에서 많은 수의 Activity를 액세스해야 하는 경우
-
Activity 내부의 view에 대한 click 이벤트를 한 곳에서 처리하고 싶은 경우
-
익명 클래스 또는 별도의 이벤트 Listener를 만들고 싶지 않은 경우
// activity에 이벤트 리스너 상속
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
// Button의 이벤트 리스너로 this(MainActivity) 지정
@Override
protected void onCreate(Bundle savedInstanceState) {
Button btn1 = (Button) findViewById(R.id.btn1);
btn1.setOnClickListener(btnOnclick);
Button btn2 = (Button) findViewById(R.id.btn2);
btn2.setOnClickListener(btnOnclick);
}
// View.OnClickListener를 implements하므로 onClick() 함수를 오버라이딩
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn1:
// btn1 동작
break;
case R.id.btn2:
// btn1 동작
break;
}
}
}
궁금한 부분이나 잘못된 부분이 있다면 댓글을 통해 알려주세요.
감사합니다. ♥
'프로그래밍 💻 > android' 카테고리의 다른 글
[Android] 안드로이드 Spinner 사용하기 (2) | 2019.06.10 |
---|---|
[Android] 안드로이드 activity 화면 전환 animation (2) | 2019.05.23 |
[Android] 안드로이드 setOnItemClickListener cannot be used with a spinner 에러 해결 (0) | 2019.05.14 |
[Android] 안드로이드 스튜디오 테마 변경하기 (0) | 2019.05.12 |
[Android] 안드로이드 illegal character u2028 에러 해결 (0) | 2019.05.08 |
- Total
- Today
- Yesterday
- Github Pages
- 일상
- intro 화면
- 프로젝트 업로드
- vscode
- Spinner
- 템플릿
- Error
- 레이저 커팅
- user setting
- github
- 정보전산직
- Maker League
- power mode
- nodejs
- react
- Live Server
- flutter_form_builder
- Inkscape
- EJS
- activiry
- nodebird
- 줌바 댄스
- 미운코딩새끼
- Android
- 줌사모
- python
- OnClickListener
- github desktop
- 강의
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |