关于android开发中接口回调的使用

昨天听了一节在线视频课程,发现这个接口回调确实在开发中特别有用而且载android开发中也经常见到,接口回调就是当发生每件事的时候,调用相应的方法,比如我们的Button,当被点击的时候,就会调用onClick,前提是你已经给Button加上监听器了,Button是继承自TextView,而TextView则是继承自View,View是根类,所以就查看了View的源代码,我摘了能说明问题的一段代码,如下:

public class View implements Drawable.Callback, KeyEvent.Callback,
		AccessibilityEventSource {
	/**
	 * Listener used to dispatch click events. This field should be made
	 * private, so it is hidden from the SDK. {@hide}
	 */
	public OnClickListener mOnClickListener;

	/**
	 * Register a callback to be invoked when this view is clicked. If this view
	 * is not clickable, it becomes clickable.
	 * 
	 * @param l
	 *            The callback that will run
	 * 
	 * @see #setClickable(boolean)
	 */
	public void setOnClickListener(OnClickListener l) {
		if (!isClickable()) {
			setClickable(true);
		}
		getListenerInfo().mOnClickListener = l;
	}

	/**
	 * Interface definition for a callback to be invoked when a view is clicked.
	 */
	public interface OnClickListener {
		/**
		 * Called when a view has been clicked.
		 * 
		 * @param v
		 *            The view that was clicked.
		 */
		void onClick(View v);
	}
}

上面代码中OnClickListener就是一个接口
再来看看我们使用Button的常用回调方法onClick:

public class Temple extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		Button button = (Button) findViewById(R.id.item3_dlbtn);
		button.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				...
			}
		});
	}

}
参考上面View的源代码,我们知道, 当我们调用 button.setOnClickListener(listener)时,其实就是将new好的listener这个对象赋值给View类中的mOnClickListener,而要new出一个listener接口对象(OnClickListener接口对象),你就要实现接口中未实现的方法onClick()方法,所以最终赋值给mOnClickListener的listener已经是一个实现了onCLick方法的接口对象,当你点击按钮的这个动作被系统感知后,View就会通过mOnClickListener对象调用onClick方法

我当时理解这种机制费了很大的劲,现在搞明白也算是学习了

后期补充:

接口就像一个桥梁,将MainActivity.class与自定义View:MyView联系起来,为了解释清楚,下面给出伪代码:

public interface onMyViewClickListener{

void onViewClick(...);

}


public class MyView{

private onMyViewClickListener mListener;

系统中监听屏幕被点击的某个方法{

mListener.onViewClick(...);

}

public void setOnViewClickListener(onMyViewClickListener listener){

mListener = listener;

}

}

MainActivity implements onMyViewClickListener{

myView.setOnViewClickListener(this);

//重写接口中的方法

public void onViewClick(...){

// 当MyView被点击是的响应

}

}

由于MainActivity实现了onMyViewClickListener接口,所以就可以把他当作接口对象来用

当myView.setOnViewClickListener(this);时,MainActivity这个接口对象就被传入给了myView对象中的mListener,所以在

系统中监听屏幕被点击的某个方法{

mListener.onViewClick(...);

}

中的mListener对象实质上就是MainActivity这个接口对象,所以mListener.onViewClick(...);这句调用的就是MainActivity这个接口对象中实现的onViewClick(...)方法。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值