java回调函数的作用_什么是回调函数?一个类中的回调函数是什么作用

发现你最近也有提Android相关的问题,那我就通过Android ListView item的点击事件,一种使用频率很高的view,通过它认识“回调”,可能有助于理解。

比如ListView包含几个概略信息条目,你想点击某个条目跳到详情界面。

一般需要这样做:

mListView.setOnItemClickListener(mOnItemClickListener);

private OnItemClickListener mOnItemClickListener = new OnItemClickListener() {

@Override

public void onItemClick(AdapterView> parent, View view, int position, long id) {

Intent intent = new Intent(getActivity(), DetailActivity.class);

intent.putExtra(DetailActivity.ITEM_ID, position);

startActivity(intent);

}

};

当你这样做时,就已经实现了一个回调(implements a callback interface)。

接下来发生的事情我们就知道了,点某个条目就跳到其详情界面。

问题是,谁去调(call)它呢?我们在实现(implements)这个回调时,为什么必须要override其中的方法呢?

为了厘清这个问题,我们从点击事件发生时执行的代码看起:

// AdapterView.class, 这是ListView父类的父类

// 当view被点到时,performItemClick就被调到,处理点击带给view的变化,除此之外,

// AdapterView还想到了,“如果其它类想在点击发生时做点儿事情,该怎么办呢?”

// 通过接口。

// (1)我来定义接口,把知道的信息(被点到的view、position、id)告诉你;

// (2)你来实现接口,然后把实现的接口告诉我。

// 呐,这是我定义的接口。

255 public interface OnItemClickListener {

270 void onItemClick(AdapterView> parent, View view, int position, long id);

271 }

// 呐,你通过这个方法把实现的接口告诉我,我会存起来的。

279 public void setOnItemClickListener(OnItemClickListener listener) {

280 mOnItemClickListener = listener;

281 }

134 OnItemClickListener mOnItemClickListener;

// 那么现在点击事件发生了:

302 public boolean performItemClick(View view, int position, long id) {

// 我先检查你是否实现了接口;

303 if (mOnItemClickListener != null) {

// 嘿,该你回来做事情了。这就是callback,我call,你back。

305 mOnItemClickListener.onItemClick(this, view, position, id);

309 return true;

310 }

312 return false;

313 }

这是callback一种典型的应用场景。Android中有很多OnClickListener使用场景,看多了之后才对callback有些粗浅的认识,以前也是糊里糊涂的。

还有其它一些注册接口的形式,比如:register***Callbacks, unregister***Callbacks, remove***Callbacks。

就是这样 :)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值