所谓回调机制,很简单,就是在做某项动作时,会执行一个操作。 而这个动作和操作一般都是一个方法。
具体实现:
在A类中定义一个属性 这个属性是一个接口,并且该接口中有一个方法。
private OnItemClickListener mOnItemClickListener;
public interface OnItemClickListener { void onItemClick(View view, int position); }
接着在定义一个供外部调用的方法,其实这个方法主要目的是把外部具体对这个接口的实现 传递进来。类似类的set方法。
public void setOnItemClickListener(OnItemClickListener mOnItemClickListener) { this.mOnItemClickListener = mOnItemClickListener; }
最后在A类中的某一个动作中调用该接口中的方法。
viewHolder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mOnItemClickListener.onItemClick(viewHolder.itemView, 111); } });
这样在A类中这个回调方法就写好了。
接着开始调用该回调方法,在B类中调用
A a=new A();
a.setOnItemClickListener(new A.OnItemClickListener() { @Override public void onItemClick(View view, int position) { //回调方法中具体实现,这个会在点击A中的一个组件时调用 } });
好啦,具体步骤就是这样,可能有的朋友还不太了解为啥B中的这个回调方法会别调用。
其实把B中的这个接口的匿名实现看做为一个类中的属性,而这个属性通过set方法传入了A中,此时A中的接口就为这个匿名实现。而这个匿名实现呢,又被设置在A中一个组件的点击监听事件中了,当这个组件被点击时,就会调用这个匿名实现。所以这个时候B类的匿名实现中的方法就被回调了。回调方法中的参数就是在A类中传递进去的。