package soo.event;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

//public class EventTest1 extends Activity implements View.OnClickListener{
public class EventTest1 extends Activity{
    /** Called when the activity is first created. */
	
	public Button bt;
	public EditText et;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.event);
        
        bt = (Button)findViewById(R.id.button01);
        et = (EditText)findViewById(R.id.editText01);
        
        //1. 익명(무명) 내부 클새스
        /*
        bt.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Toast.makeText(EventTest1.this, "익명(무명) 내부 클래스\n\n이벤트 처리", Toast.LENGTH_LONG).show();
				et.setTextColor(Color.RED);
				et.setText("익명(무명) 내부클래스로 \n\n이벤트 처리");
			}
		});
        */

        //2_1. 유명 내부클래스로 처리 (메소드 안에 클래스 선언)
        /*
        class InnerHandler implements View.OnClickListener{
        	@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Toast.makeText(EventTest1.this, "유명 내부클래스로 처리 (메소드 안에 클래스 선언)이벤트 처리", Toast.LENGTH_LONG).show();
				et.setTextColor(Color.BLUE);
				et.setText("유명 내부클래스로 처리 (메소드 안에 클래스 선언) 이벤트 처리");
			}
        }
        bt.setOnClickListener(new InnerHandler());
        */
        //bt.setOnClickListener(new InnerHandler());
        //bt.setOnClickListener(this);
        
        //bt.setOnClickListener(new ThirdHandler(this)); //생성자 방식으로 하는 방법
        bt.setOnClickListener(new ThirdHandler());		 //View의 context를 이용해서 하는 경우
    }

	
    
    //2_2. 유명 내부클래스로 처리 (클래스안에 클래스 선언)
    /*
    class InnerHandler implements View.OnClickListener{
    	@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			Toast.makeText(EventTest1.this, "유명 내부클래스로 처리 (클래스안에 클래스 선언)이벤트 처리", Toast.LENGTH_LONG).show();
			// 유명 내부클래스일 경우에는 지역 변수를 멤버변수로 빼어야 하는 경우가 발생 한다.
			et.setTextColor(Color.YELLOW);
			et.setText("유명 내부클래스로 처리 (클래스안에 클래스 선언) 이벤트 처리");
		}
    }
    */
    
    //3. 자기자신의 클래스로 처리한다.
    /*
    @Override
	public void onClick(View v) {
    	// TODO Auto-generated method stub
		Toast.makeText(EventTest1.this, "자기자신의 클래스로 처리 이벤트 처리", Toast.LENGTH_LONG).show();
		// 유명 내부클래스일 경우에는 지역 변수를 멤버변수로 빼어야 하는 경우가 발생 한다.
		et.setTextColor(Color.BLUE);
		et.setText("자기자신의 클래스로 처리 이벤트 처리");
	}
	*/
    
    public EditText getEt(){
    	return et;
    }    
}

//4. 제 3클래스로 처리
class ThirdHandler implements View.OnClickListener{
	/*
	EventTest1 etest;
	public ThirdHandler(EventTest1 etest) {
		this.etest=etest;
		// TODO Auto-generated constructor stub
	}
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		Toast.makeText(etest, "제 3클래스로 처리 이벤트 처리", Toast.LENGTH_LONG).show();
		// 유명 내부클래스일 경우에는 지역 변수를 멤버변수로 빼어야 하는 경우가 발생 한다.
		etest.getEt().setTextColor(Color.RED);
		etest.getEt().setText("제 3클래스로 처리 이벤트 처리");
	}
	*/
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		Toast.makeText(v.getContext(), "제 3클래스로 처리 이벤트 처리", Toast.LENGTH_LONG).show();
		// 유명 내부클래스일 경우에는 지역 변수를 멤버변수로 빼어야 하는 경우가 발생 한다.
		((EventTest1)v.getContext()).getEt().setTextColor(Color.RED);
		((EventTest1)v.getContext()).getEt().setText("제 3클래스로 처리 이벤트 처리");
	}
}
