■ 안드로이드 버튼 클릭 이벤트 다양한 방법 ( Button.setOnClickListener() )

2017. 5. 23. 18:11BASIC/android

1. 익명 클래스 사용


Button button = (Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 익명 클래스 Click Event !
}
});

특정 버튼의 이벤트가 어디서 처리되어지는지 직관적으로 확인할 수 있으며, 

대부분의 안드로이드 프로그래밍 도서에 가장 첫번째로 설명되는 이벤트 리스너로 가장 자주 사용되는 방법입니다.

하지만, 버튼의 개수가 많아졌을 때 버튼의 개수만큼 각각 익명 클래스 개체를 생성해야하고

더불어 해당 익명 클래스 내에서 외부의 변수를 참조하려면 final 키워드를 사용해야 하는 번거러움이 발생합니다.


  - 버튼의 개수가 적고, 버튼간의 연관성이 적은 경우

  - 함수 내에서 익명 클래스 외부의 변수를 참조하지 않는 경우



2. 익명 클래스의 참조 사용

Button.OnClickListener onClickListener = new Button.OnClickListener() { 
@Override
public void onClick(View view) {
TextView textView1 = (TextView) findViewById(R.id.textView1);
switch (view.getId()) {
case R.id.buttonRed : textView1.setText("Red") ;
textView1.setBackgroundColor(Color.rgb(255, 0, 0));
break ;
case R.id.buttonGreen : textView1.setText("Green") ;
textView1.setBackgroundColor(Color.rgb(0, 255, 0)); break ;
case R.id.buttonBlue : textView1.setText("Blue") ;
textView1.setBackgroundColor(Color.rgb(0, 0, 255));
break ;
}
}
} ;
Button buttonRed = (Button) findViewById(R.id.buttonRed) ;
buttonRed.setOnClickListener(onClickListener) ;
Button buttonGreen = (Button) findViewById(R.id.buttonGreen) ;
buttonGreen.setOnClickListener(onClickListener) ;
Button buttonBlue = (Button) findViewById(R.id.buttonBlue) ;
buttonBlue.setOnClickListener(onClickListener) ;

익명 클래스 객체를 먼저 만들어 놓고 모든 버튼의 이벤트 리스너로 사용하는 것으로

객체를 매번 생성하지 않기 때문에 하나의 리스너 안의 핸들러 함수(onClick)에서 구분되는 차이점을 가지고 있습니다.