Android回调函数简单例子,在Android中运用接口回调与回调函数

最近在啃设计模式,所以会注意到一些架构化的设计,接口回调与回调函数也是在项目中结合网上的一些Java接口回调与回调函数的文章抽出来总结的。

接口回调

关于接口回调,这是网上一篇关于Java接口回调与回调函数文章的概念以及代码示例:

接口回调是指:可以把使用某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口的方法。实际上,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,这一过程称为对象功能的接口回调。

interface People{

void peopleList();

}

class Student implements People{

public void peopleList(){

System.out.println("I’m a student.");

}

}

class Teacher implements People{

public void peopleList(){

System.out.println("I’m a teacher.");

}

}

public class Example{

public static void main(String args[]){

People a; //声明接口变量

a=new Student(); //实例化,接口变量中存放对象的引用

a.peopleList(); //接口回调

a=new Teacher(); //实例化,接口变量中存放对象的引用

a.peopleList(); //接口回调

}

}

有点抽象?其实直接这么理解就行了:

接口  a =new 实例化接口的对象();

这在设计模式中也是经常用到的,这也是面向对象的一大精髓 -> 面向接口的一个做法,面向接口能够给代码带来更多的解耦,结合设计模式使用能发挥更大作用,面向接口的好处在这里也不多详述了。

回调函数

回调函数的过程如图所示,

callback.JPG

关于回调函数,有个不错的例子,摘自里面的一段解释:

所谓回调:就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法

在Android里边比较不错的例子是

mButton.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

//TODO:events

}

});

其中,onClick(View view)就是回调函数,这个流程是这样的:

在当前类中调用了View类的setOnClickListener()方法,而View类反过来调用了当前类的onClick(View view)

原理就是这样,至于Android源码是怎么回调这个onClick(View view)的,可以去看看Android的官方源码

在Android中用接口实现回调函数的等价功能

这是我在使用recycleview中,加载更多时用到的。需求是这样的,在主界面070ea4f795dd593ed841ee86398c83fc.png 2a2a2c5e4040abdbee9794bb31755baa.png

底部有个点击重新加载之后变为第二张图,那么怎么做的呢,结合回调接口,首先写好一个接口类

public interface LoadMoreDataAgainListener {

void loadMoreDataAgain(TextView textView, View loadingView);

}

接着RecyclerView的Adapter写好创建监听器的方法

public void setOnMoreDataLoadAgainListener(LoadMoreDataAgainListener onMoreDataLoadAgainListener) {

mLoadMoreDataAgainListener = onMoreDataLoadAgainListener;

}

在RecyclerView.ViewHolder中view的监听器:

@OnClick({R.id.loadingIndicatorView, R.id.tv_load_data_again})

public void onClick(View view) {

mLoadMoreDataAgainListener.loadMoreDataAgain(mTvLoadDataAgain, mAvLoadingIndicatorView);

}

在fragment类中为adapter传递该监听器:

private AddFooterBaseAdapter mAddFooterBaseAdapter;

mAddFooterBaseAdapter.setOnMoreDataLoadAgainListener(new LoadMoreDataAgainListener() {

@Override

public void loadMoreDataAgain(TextView textView, View loadingView) {

textView.setVisibility(View.GONE);

loadingView.setVisibility(View.VISIBLE);

//TODO:加载更多数据

}

});

至此,一个接口实现回调函数的等价功能就实现了

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值