android event listener 사용법
Event listener를 사용하는 과정은 이벤트를 처리할 콜백 함수를 정의하는 것과
해당 함수의 인스턴스를 set....Listener를 이용해서 등록하는 것으로 이루어진다.
크게 4가지 방법으로 이벤트 리스너의 정의와 등록을 할 수 있다.
1. Activity에 nested interface를 직접 기술하는 방법
액티비티에 인터페이스를 기술하고 콜백 함수를 정의한다. set...Listener등록시에는 this를 넘겨준다.
public class VoiceRecognition extends Activity implements OnClickListener { ...... speakButton.setOnClickListener(this); ...... public void onClick(View v) { if (v.getId() == R.id.btn_speak) { startVoiceRecognitionActivity(); } }
2. 별도의 사용자 클래스를 인터페이스를 통해 정의하여 등록하는 방법
implements 인터페이스(리스너이름)로 콜백이 포함된 클래스를 정의하고 해당하는 인스턴스를 등록한다.
mButtonNext.setOnClickListener(new MyButtonListener()); ...... private class MyButtonListener implements OnClickListener { public void onClick(View v) { State player = mGameView.getCurrentPlayer(); if (player == State.WIN) { GameActivity.this.finish(); } else if (player == State.PLAYER1) { int cell = mGameView.getSelection(); if (cell >= 0) { mGameView.stopBlink(); mGameView.setCell(cell, player); finishTurn(); } } } }
3. Anonymous 클래스를 정의하여 등록하는 방법
Anonymous 클래스를 통해 콜백 함수를 정의하고(mFadeListener), 해당 인스턴스를 등록한다.
public class Animation extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_animation); Button button = (Button)findViewById(R.id.fade_animation); button.setOnClickListener(mFadeListener); button = (Button)findViewById(R.id.zoom_animation); button.setOnClickListener(mZoomListener); } private OnClickListener mFadeListener = new OnClickListener() { public void onClick(View v) { startActivity(new Intent(Animation.this, Controls1.class)); overridePendingTransition(R.anim.fade, R.anim.hold); } };
4. Anonymous 클래스 정의와 등록을 한번에 수행하는 방법이 있다.
set...Listener의 파라미터로 Anonymous 클래스를 직접 기술하는 방식
addButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Button newButton = new Button(LayoutAnimations.this); newButton.setText("Click to Delete " + (numButtons++)); newButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { container.removeView(v); } }); container.addView(newButton, Math.min(1, container.getChildCount())); } });
5. xml의 해당 버튼에 onClick 이벤트가 발생할때 처리할 메소드를 지정하는 방식 (안드로이드 1.6 이상부터)
android:onClick="onClick"
public void onClick(View v){ Date curDate = new Date(); switch (v.getId()) { case R.id.button_date: createDateDialog(curDate); break; case R.id.button_time: createTimeDialog(curDate); break; default: break; } }
'안드로이드 개발 팁' 카테고리의 다른 글
android Bundle (foreach로 값 받기) (0) | 2013.08.28 |
---|---|
안드로이드 카메라, 동영상 기본 저장 경로 구하기 (0) | 2013.08.07 |
android gesture example (0) | 2013.07.03 |
android custom toast 만들기 (0) | 2013.06.28 |
프로그래스 다이알로그 ani (0) | 2013.06.12 |