1 Java的接口回调
在Java当中,使用接口回调的形式传递数据很常见,定义接口,声明接口,在A类中传入接口的实例对象,就可以接收传入的数据index.而在kotlin中,比较简单,传入一个函数即可
B
public class B {
void testClick(){
if (iUpdateListener!=null){
iUpdateListener.updateItem(9);
}
}
IUpdateListener iUpdateListener;
public void setiUpdateListener(IUpdateListener iUpdateListener) {
this.iUpdateListener = iUpdateListener;
}
interface IUpdateListener{
void updateItem(int index);
}
}
A
public class A {
void testMethod(){
B b = new B();
b.setiUpdateListener(new B.IUpdateListener() {
@Override
public void updateItem(int index) {
//TODO 接收调用的地方
}
});
}
}
2.kotlin 高阶函数
先说下高级函数的结构,kotlin 函数一等公民,可以由引用来代表一个函数。
imageLoader: ((T, ImageView) -> Unit)
-
imageLoader 函数的引用对象
-
(T, ImageView) 当前函数的参数,T 是泛型
-
->Unit 这部分就是函数的返回值
使用:
B
fun setDataList(
dataList: List<T>,
imageLoader: ((T, ImageView) -> Unit) ) {
调用高阶函数,传入参数即可,就会回调到A类的函数体
this.imageLoader(dataList[position], mImageView)
}
A
viewHolder.myGridView.setDataList(listItem.images) { bean, imageView ->
Glide.with(mContext).load(bean.imgOrgUrl).into(imageView)
}
//bean 对应泛型对象
//imageView