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;
		}
	}


참고 : http://www.dongwun.com/tc/49

+ Recent posts