Android进阶之路 - 接口回调(三)
2017-07-21 18:01
330 查看
对…,你没有看错!接口回调这已经是我写的第三篇博文了,之前的概念一直迷迷糊糊,一直照猫画虎,只有其形,而无其意,这篇本章可能是目前为止理解最深的一篇关于接口回调的博文了,我以俩种方式进行讲解的,第一种是常规方式,进行举例,第二种方式是已观察者和订阅者的理解举例的。
后面的补充内容,为后期补录的彩蛋!
Effect :
代码中的 A/B/C标注均有作用,后续可自行查看执行逻辑。
个人理解:
1.接口回调主要有三方,一方为需求方(A方),这里我们往往要获取我们想要的数据,如我们需要投资理财产品,这时候我们就需要找对应平台产品去投资,就像房屋中介一样的性质,这里我们用的就是接口(一个容器,简称B方),由B去帮我们找数据,找资源,让他去处理,而B去查看的区域,就是C方了, 这里告诉了我们该具体都是哪一款产品,哪一款房子!(其实在这里我们已经把我们想要的数据存储在了B方),之后我们就可以返回A方,进行数据填充,确定投资方向!
这里的执行逻辑是 :A - B - C - A
这里的写入(就是写代码的顺序)逻辑是:B - C - A or B - A -C
2.现在的三方框架如EvEntBus或者RxAndroid or RxJava,EventBus下我们在数据改变处(监听)可以发送状态,进行数据存入,然后在数据可需处,进行EventBus的注册,注册, 然后通过sub方法进行数据读取进行操作。
这个更像Rx下的机制,我们都知道现在很多这样的开发模式中,有观察者,被观察者,执行者,其实这里也可以很好的诠释接口回调的问题,我们在数据获取的类,放入被观察者(接口),然后回到数据可需处,等被观察者的数据的存入,我们在当前调用执行者进行逻辑处理
OwnListener (接口 - 容器):
Listener (监听处 - 相当于Set数据的过程) :
MainActivity (这里我们相当于发送请求(执行过程:1.发送 2.查看接口实现处 3.接口实现处获取的数据 4.设置接口中已经保存的数据)):
补充内容:因为准备在新项目中采用MVP的开发模式进行开发,所以接口回调的使用必须熟练使用,故意进行博文补录
目前梳理之后,我归结为接口的回调的常用使用方式有三种,下面通过代码片段帮助大家理解
第一种,常规监听
思想总结 : A类调用B类方法,当B类的方法回调接口,把结果传回A类
下面代码中,MainActivity 代表 A类, AClass代表B类
执行步骤:
1.创建一个接口,同时接口内部创建一个方法,用于数据回传(MainActivity 处实现此接口),如
2.在ManiActivity中实现这个接口,如
3.调用AClass的方法,首先要拥有AClass的实例,之后调取AClass中的
4.AClass类的代码要注意,首先要拥有MainListener的成员变量,注册在成员方法中,如
第二种方法,常用的成功,失败回调
1.创建接口
2.AClass类创建方法,满足一定条件之后,使用接口进行标记
3.MainActivity 调用处
第三种方式 ,Activity 之间接口回调
主要思想 :中转站思想,使用Manager进行接口中转,如
SecoundListener :
MainActivity :
SecoundActivity :
下载地址
后面的补充内容,为后期补录的彩蛋!
Effect :
代码中的 A/B/C标注均有作用,后续可自行查看执行逻辑。
个人理解:
1.接口回调主要有三方,一方为需求方(A方),这里我们往往要获取我们想要的数据,如我们需要投资理财产品,这时候我们就需要找对应平台产品去投资,就像房屋中介一样的性质,这里我们用的就是接口(一个容器,简称B方),由B去帮我们找数据,找资源,让他去处理,而B去查看的区域,就是C方了, 这里告诉了我们该具体都是哪一款产品,哪一款房子!(其实在这里我们已经把我们想要的数据存储在了B方),之后我们就可以返回A方,进行数据填充,确定投资方向!
这里的执行逻辑是 :A - B - C - A
这里的写入(就是写代码的顺序)逻辑是:B - C - A or B - A -C
2.现在的三方框架如EvEntBus或者RxAndroid or RxJava,EventBus下我们在数据改变处(监听)可以发送状态,进行数据存入,然后在数据可需处,进行EventBus的注册,注册, 然后通过sub方法进行数据读取进行操作。
这个更像Rx下的机制,我们都知道现在很多这样的开发模式中,有观察者,被观察者,执行者,其实这里也可以很好的诠释接口回调的问题,我们在数据获取的类,放入被观察者(接口),然后回到数据可需处,等被观察者的数据的存入,我们在当前调用执行者进行逻辑处理
OwnListener (接口 - 容器):
package com.yl.aninterface.interfacedata; /** * Created by YongLiu on 2017/7/21. */ public interface OwnListener { void setData (String string); }
Listener (监听处 - 相当于Set数据的过程) :
package com.yl.aninterface.interfacedata; import android.content.Context; /** * Created by YongLiu on 2017/7/21. */ public class Listener { public Context mContext; public OwnListener ownListener; public Listener(Context context,OwnListener listener){ this.mContext=context; this.ownListener=listener; } //B :数据处理 void setListener(){ ownListener.setData("这里我们储存了数据"); } }
MainActivity (这里我们相当于发送请求(执行过程:1.发送 2.查看接口实现处 3.接口实现处获取的数据 4.设置接口中已经保存的数据)):
package com.yl.aninterface.interfacedata; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.TextView; public class MainActivity extends AppCompatActivity implements View.OnClickListener,OwnListener { private TextView mView; private TextView mContent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mView = (TextView) findViewById(R.id.tv_btn); mContent = (TextView) findViewById(R.id.tv_content); mView.setOnClickListener(this); } @Override public void onClick(View v) { // A :相当于发送数据 if(v.getId()==R.id.tv_btn){ new Listener(this, this).setListener(); } } // C :获取数据 @Override public void setData(String string) { mContent.setText(string); } }
补充内容:因为准备在新项目中采用MVP的开发模式进行开发,所以接口回调的使用必须熟练使用,故意进行博文补录
目前梳理之后,我归结为接口的回调的常用使用方式有三种,下面通过代码片段帮助大家理解
第一种,常规监听
思想总结 : A类调用B类方法,当B类的方法回调接口,把结果传回A类
下面代码中,MainActivity 代表 A类, AClass代表B类
执行步骤:
1.创建一个接口,同时接口内部创建一个方法,用于数据回传(MainActivity 处实现此接口),如
package com.bakheet.effect.interfacedemo; /** * Created by YongLiu on 2017/11/8. */ public interface MainListener { void setData(String data); }
2.在ManiActivity中实现这个接口,如
@Override public void setData(String data) { mBtn.setText(data); }
3.调用AClass的方法,首先要拥有AClass的实例,之后调取AClass中的
aClass = new AClass(this); mBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { aClass.setData("MainActivity 传到 AClass的数据"); } });
4.AClass类的代码要注意,首先要拥有MainListener的成员变量,注册在成员方法中,如
public MainListener listener; public AClass(MainListener listener){ this.listener=listener; } public void setData(String data) { String ste=data+"AClass 接收信息之后的回传"; listener.setData(ste); }
第二种方法,常用的成功,失败回调
1.创建接口
package com.bakheet.effect.interfacedemo; /** * Created by YongLiu on 2017/11/8. */ public interface BListener { void Succeed(); void Faieail(); }
2.AClass类创建方法,满足一定条件之后,使用接口进行标记
void setListener(String ste,BListener bListener){ if(ste.equals("MainActivity 传到 AClass的数据AClass 接收信息之后的回传")){ Log.e("tag","AClass要传入的数据"); bListener.Succeed(); }else{ Log.e("tag","Main传来的数据"); bListener.Faieail(); } }
3.MainActivity 调用处
aClass = new AClass(this); aClass.setListener(mBtn.getText().toString(), new BListener() { @Override public void Succeed() { Log.e("tag", "Set Succeed回调"); } @Override public void Faieail() { Log.e("tag", "Set Faieail回调"); } });
第三种方式 ,Activity 之间接口回调
主要思想 :中转站思想,使用Manager进行接口中转,如
package com.bakheet.effect.interfacedemo; /** * Created by YongLiu on 2017/11/8. */ public class InterManager { public SecoundListener secoundListener; private InterManager() { } public static InterManager interManager = new InterManager(); public InterManager getInstance() { return interManager; } public void setSecoundListener(SecoundListener secoundListener) { this.secoundListener = secoundListener; } }
SecoundListener :
package com.bakheet.effect.interfacedemo; public interface SecoundListener{ void getData(String data); }
MainActivity :
//注册监听 同时实现接口内方法 InterManager.interManager.setSecoundListener(this); @Override public void getData(String data) { Toast.makeText(this, "---" + data, Toast.LENGTH_SHORT).show(); mBtn.setText(data); }
SecoundActivity :
mBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { sendData(InterManager.interManager.secoundListener); } }); private void sendData(SecoundListener listener) { listener.getData("回头已是百年时"); }
下载地址
相关文章推荐
- Android进阶之路 - 接口回调(一)
- Android 进阶之路 - 接口回调(二)
- Android 回调接口
- Android中使用回调接口实现自定义view的点击事件
- Android回调接口的写法
- android回调接口的两种方式
- Android接口回调
- android的接口回调
- 深入浅析Android接口回调机制
- Android 中的接口回调
- 一张图看明白android 接口回调机制
- Android中封装View提供接口供点击事件回调的方法及使用
- Android 中的接口回调
- Android开发之通过接口回调机制加载数据(源代码分享)
- 浅谈接口回调以及在Android中的使用
- android简单接口回调
- Android接口回调
- Android 回调接口是啥,回调机制详解(zhuan)
- 【Android】关于在Service中通过接口回调更新Activity的UI