android回调简介

回调分为几部分:接口interface、回调类class、实现类class。

一、写一个接口OnMyBtClick:

package com.example.mydemo;

public interface OnMyBtClick {
	void onClick();
}
上为一个最简单的接口,接口里面只有一个方法。

二、写一个回调类MyButton:

package com.example.mydemo;

public class MyButton {
	OnMyBtClick listener;

	/**
	 * 关键就在于参数是个接口
	 * */
	public void setOnClickListener(OnMyBtClick listener) {
		this.listener = listener;
	}
}
回调类中触发事件被我简化了。仅仅为了更简洁的看出这个回调。

简单讲两句我的理解:

一、类MyButton.class是一个非常普通的类,但是,当实例化类MyButton的时候,调用自身方法setOnClickListener(OnMyBtClick listener)时会发现,参数不是一个普通的类,

而是一个接口类OnMyBtClick,所以当需要listener时,必然涉及到实现OnMyBtClick接口new一个新的类或者匿名类。实现接口内onClick()方法。

二、实现了 这个方法后发现好像实现了这个MyButton没什么用,是不是?因为我简化了这个MyButton类。正常代码如下:

package com.example.mydemo;

public class MyButton {
	OnMyBtClick listener;

	/**
	 * 触发事件
	 * 当点击的时候,listener存在,onClick方法也已经被实现了
	 * */
	public void click() {
		listener.onClick();
	}

	/**
	 * 关键就在于参数是个接口
	 * */
	public void setOnClickListener(OnMyBtClick listener) {
		this.listener = listener;
	}
}
如上,这样子就有触发事件了。click()方法。

再简单讲两句我的理解:

从这就能看出实现接口的意义:把onClick()方法的具体内容交给用这个类的人去自己实现。加大灵活性。

如果OnMyBtClick是个普通类,那么我就固定了只能在我的onClick()方法写死,灵活性及复用性上差不少。(又比如我的网络链接请求,每次成功后,我都必须有个处理,总不能每次都做一样的事情,这儿就可以类推)

三、写个主方法:调用看看效果。

package com.example.mydemo;

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
	MyButton myButton;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initView();
	}

	private void initView() {
		myButton = new MyButton();
		myButton.setOnClickListener(new OnMyBtClick() {
			@Override
			public void onClick() {
				Toast.makeText(getApplicationContext(), "myBt被点击了",
						Toast.LENGTH_SHORT).show();
			}
		});
	}

	@Override
	public boolean onTouchEvent(MotionEvent event) {
		switch (event.getAction()) {
		case MotionEvent.ACTION_DOWN:
			/**
			 * 触发事件
			 * */
			myButton.click();
			break;

		default:
			break;
		}
		return true;
	}

}
是不是看着很熟悉,这段代码:(是不是和监听事件很像?对,就是这个效果),相信你已经理解了回调。

myButton = new MyButton();
		myButton.setOnClickListener(new OnMyBtClick() {
			@Override
			public void onClick() {
				Toast.makeText(getApplicationContext(), "myBt被点击了",
						Toast.LENGTH_SHORT).show();
			}
		});









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值