프로그래밍/android2012. 8. 31. 21:30

자식 뷰의 이벤트가 발생했을 때 부모 뷰에서 받아서 어떤 작업을 할 때



   
public class MyView extends LinearLayout
{
	private OnTestClickListener _testClickListener;
	
	
	public MyView(Context context, AttributeSet attrs)
	{
		super(context, attrs);
		init();
	}
	
	
	public MyView(Context context)
	{
		super(context);
		init();
	}
	
	
	private void init()
	{
		setGravity(Gravity.CENTER);
		
		Button kTestBtn = new Button(getContext());
		kTestBtn.setText("테스트");
		kTestBtn.setOnClickListener(onTestBtnClickListener);
		
		addView(kTestBtn);
	}
	
	private OnClickListener onTestBtnClickListener = new OnClickListener()
	{
		@Override
		public void onClick(View v)
		{
			_testClickListener.onClick();
		}
	};
	
	
	public void setOnTestClickListener(OnTestClickListener $listener)
	{
		_testClickListener = $listener;
	}
	
	//===================
	// click listener
	//===================
	public interface OnTestClickListener
	{
		public void onClick();
	}
	
}



부모뷰에 표시할 자식 뷰를 생성한다.




   
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#00ff00"
    android:gravity="center"
    android:orientation="vertical" >

    <kr.mint.testlistener.MyView
        android:id="@+id/myView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#00ffff"
        android:minHeight="100dp"
        android:minWidth="100dp" />

</LinearLayout>


부모뷰의 레이아웃에 추가한다.




   
public class MainActivity extends Activity
{
	
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		MyView kMyView = (MyView) findViewById(R.id.myView1);
		kMyView.setOnTestClickListener(onTestClickListener);
	}
	
	
	private void onTestClick()
	{
		Log.w("MainActivity | onTestClick()", " click ");
	}
	
	private OnTestClickListener onTestClickListener = new OnTestClickListener()
	{
		
		@Override
		public void onClick()
		{
			onTestClick();
		}
	};
}

부모뷰에서는 자식뷰의 상태를 감시할 리스너를 등록하고, 자식뷰에서 호출이 오면 지정한 함수를 실행한다.

Posted by 쎄미

댓글을 달아 주세요