深度解析java接口回调机制
2016-11-14 15:47
579 查看
一、系统源码分析
package com.itheima.testinterface;
public class CompoundButton {
}
package com.itheima.testinterface;
public class MyCheckBox extends CompoundButton{
}
package com.itheima.testinterface;
import com.itheima.testinterface.CompoundButton.OnCheckedChangeListener;
public class TestInterface {
}
二(1)、真实项目中用到的接口回调
A类:
/**
* 获取会员信息(为了获取用户验证身份的手机号码)
*/
public static void getUserInfo(final MallAuthenticationPresenter.TranslatCallback translatCallback) {
B类:
public class MallAuthenticationPresenter extends BasePresenter {
二(2)针对上面例子 自己写的简单容易理解的例子
package com.itheima.testinterfaces;
import com.itheima.testinterfaces.B.IDog;
/**
*
* 这个类相当于adapter,只是调用了接口里的方法而已,接口作为方法的参数,但是具体的实现业务逻辑要放在写接口的那个类中
*
*/
public class A {
}
package com.itheima.testinterfaces;
public class B {
/**
* 这个类相当于Activity:接口和接口里的方法写在activity中完成具体的业务逻辑(比如adapter里item的删除操作)
*/
public static void methodB(){
A.methodA(new IDog() {
}
三(1)实际项目中用到的接口回调(编辑收货地址参照真实项目)
三、(2)根据上面的例子写自己的简单容易理解的接口回调
package com.itheima.testinterfacess;
(1)定义一个接口
public interface IDog {
}
(2)定义一个接口的实现类(A类)
package com.itheima.testinterfacess;
/**
* 具体的业务逻辑在这里实现
* @author Administrator
*
*/
public class A implements IDog{
}
(3)B类
package com.itheima.testinterfacess;
public class Test {
}
输出结果:
狗哭:
狗吃:
狗说:
四、实际项目中运用的接口回调(我的商城商品收藏ListView与adapter之间)
1、在addaprer中:
三步走战略:(1)、定义一个接口
(2)、定义一个接口变量
(3)、对外暴露一个方法
当点击某一个button的时候用接口变量调用接口中的方法
比如实际中的项目:
(1)interface OnProductClickListener {
}
(2)private OnProductClickListener onProductClickListener;
(3)public void setOnProductClickListener(OnProductClickListener onProductClickListener) {
this.onProductClickListener = onProductClickListener;
}
(4)view.getFrontView().setOnClickListener(new OnClickListener() {
});
2、在activity 中用适配器变量调用在适配器中暴露出来的方法
比如在实际的项目中:
adapter.setOnProductClickListener(new OnProductClickListener() {
@Override
public void frontView(int position) {
String productId;
productId = list.get(position).getProductId();
/跳转到新版的商品详情页/
//当在adapter中点击跳转的时候,具体的业务逻辑在activity中实现。
StartActivityUtils.goToProductDetailActivity(MallProductCollectActivity.this, productId);
}
@Override
public void cancelCollect(int position) {
String productId1;
productId1 = list.get(position).getProductId();
Itemposition = position;
getPresenter().cancleCollect(productId1);
}
});
package com.itheima.testinterface;
public class CompoundButton {
/** * 接口回调四步走战略:1.定义一个接口(接口中当然要包括方法) * 2.定义一个接口变量 * 3.设置一个接口监听 * 4.在满足某一条件下接口变量调用接口方法 */ //1.定义一个接口(接口里面包含方法) public static interface OnCheckedChangeListener { void onCheckedChanged(CompoundButton buttonView, boolean isChecked); } //2.定义一个接口变量 private OnCheckedChangeListener mOnCheckedChangeListener; //3.设置一个接口监听 public void setOnCheckedChangeListener(OnCheckedChangeListener listener) { mOnCheckedChangeListener = listener; } public void setChanged(){ if (mOnCheckedChangeListener != null) { mOnCheckedChangeListener.onCheckedChanged(this, true); } }
}
package com.itheima.testinterface;
public class MyCheckBox extends CompoundButton{
}
package com.itheima.testinterface;
import com.itheima.testinterface.CompoundButton.OnCheckedChangeListener;
public class TestInterface {
public static void main(String[] args) { // TODO Auto-generated method stub MyCheckBox myCheckBox = new MyCheckBox(); myCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { // TODO Auto-generated method stub } }); }
}
二(1)、真实项目中用到的接口回调
A类:
/**
* 获取会员信息(为了获取用户验证身份的手机号码)
*/
public static void getUserInfo(final MallAuthenticationPresenter.TranslatCallback translatCallback) {
OkHttpRequestUtils.doRequest(UrlManager.getUrl("safeCenterAuthentication"), null, new RawCallback() { @Override public void onSuccess(String data) { if (data.contains("您还没有登录,请登录!")) { //用户还没有登录 translatCallback.noLogin(); } else { //用户已经登录,进行json解析 MallUserInfoBean mallUserInfoBean = GsonUtil.JsonToBean(data, MallUserInfoBean.class); translatCallback.hasLogin(mallUserInfoBean); } } @Override public void onBefore() { translatCallback.onBefore(); } @Override public void onError(String errorMsg) { translatCallback.onError(errorMsg); } @Override public void onComplete() { translatCallback.onComplete(); } }); }
B类:
public class MallAuthenticationPresenter extends BasePresenter {
/** * 获取会员信息 */ public void getUserInfo(){ MallApi.getUserInfo(new TranslatCallback() { @Override public void noLogin() { getView().noLogin(); } @Override public void hasLogin(MallUserInfoBean mallUserInfoBean) { getView().showUserPhoneNum(mallUserInfoBean); } //网络请求之前 @Override public void onBefore() { if (getView() == null) { return; } else { //显示正在加载的进度条 getView().showProgress(GetStringUtils.getLoadingString()); } } @Override public void onError(String errorMsg) { if (getView() != null) { //显示加载失败的提示信息 getView().showToastError(errorMsg); } } @Override public void onComplete() { if (getView() == null) { return; } else { //使正在加载的进度进度条消失 getView().dismissProgress(); } } }); } /** * 传输状态的接口 */ public interface TranslatCallback{ void noLogin();//没有登录 void hasLogin(MallUserInfoBean mallUserInfoBean);//已经登录 void onBefore();//网络请求之前 void onError(String errorMsg);//网络请求错误 void onComplete();//网络请求完成 }
二(2)针对上面例子 自己写的简单容易理解的例子
package com.itheima.testinterfaces;
import com.itheima.testinterfaces.B.IDog;
/**
*
* 这个类相当于adapter,只是调用了接口里的方法而已,接口作为方法的参数,但是具体的实现业务逻辑要放在写接口的那个类中
*
*/
public class A {
public static void methodA(IDog dog){ dog.say(); dog.eat(); dog.cry(); }
}
package com.itheima.testinterfaces;
public class B {
/**
* 这个类相当于Activity:接口和接口里的方法写在activity中完成具体的业务逻辑(比如adapter里item的删除操作)
*/
public static void methodB(){
A.methodA(new IDog() {
@Override public void say() { // TODO Auto-generated method stub System.out.println("狗说:"); } @Override public void eat() { // TODO Auto-generated method stub System.out.println("狗吃:"); } @Override public void cry() { // TODO Auto-generated method stub System.out.println("狗哭:"); } }); } interface IDog { void say(); void eat(); void cry(); }
}
三(1)实际项目中用到的接口回调(编辑收货地址参照真实项目)
三、(2)根据上面的例子写自己的简单容易理解的接口回调
package com.itheima.testinterfacess;
(1)定义一个接口
public interface IDog {
void eat(); void say(); void cry();
}
(2)定义一个接口的实现类(A类)
package com.itheima.testinterfacess;
/**
* 具体的业务逻辑在这里实现
* @author Administrator
*
*/
public class A implements IDog{
@Override public void eat() { // TODO Auto-generated method stub System.out.println("狗吃:"); } @Override public void say() { // TODO Auto-generated method stub System.out.println("狗说:"); } @Override public void cry() { // TODO Auto-generated method stub System.out.println("狗哭:"); }
}
(3)B类
package com.itheima.testinterfacess;
public class Test {
public static void main(String[] args) { IDog dog = new A();//这里new一个接口的实现类 dog.cry(); dog.eat(); dog.say(); }
}
输出结果:
狗哭:
狗吃:
狗说:
四、实际项目中运用的接口回调(我的商城商品收藏ListView与adapter之间)
1、在addaprer中:
三步走战略:(1)、定义一个接口
(2)、定义一个接口变量
(3)、对外暴露一个方法
当点击某一个button的时候用接口变量调用接口中的方法
比如实际中的项目:
(1)interface OnProductClickListener {
//点击条目跳转商品详情 void frontView(int position); //点击取消收藏 void cancelCollect(int position);
}
(2)private OnProductClickListener onProductClickListener;
(3)public void setOnProductClickListener(OnProductClickListener onProductClickListener) {
this.onProductClickListener = onProductClickListener;
}
(4)view.getFrontView().setOnClickListener(new OnClickListener() {
@Override public void onClick(View v) { if (onProductClickListener != null) { //当点击某一个按钮的时候触发调用接口里面的方法 onProductClickListener.frontView(position); }
});
2、在activity 中用适配器变量调用在适配器中暴露出来的方法
比如在实际的项目中:
adapter.setOnProductClickListener(new OnProductClickListener() {
@Override
public void frontView(int position) {
String productId;
productId = list.get(position).getProductId();
/跳转到新版的商品详情页/
//当在adapter中点击跳转的时候,具体的业务逻辑在activity中实现。
StartActivityUtils.goToProductDetailActivity(MallProductCollectActivity.this, productId);
}
@Override
public void cancelCollect(int position) {
String productId1;
productId1 = list.get(position).getProductId();
Itemposition = position;
getPresenter().cancleCollect(productId1);
}
});
相关文章推荐
- Java回调机制解析
- Java 回调机制解析
- Java回调机制解析
- Java回调机制解析
- java之模块学习-接口回调机制详解
- java接口回调的解析
- JAVA中基于接口(Interface)的回调机制
- Android java回调机制与自定义接口回调方法
- Java回调机制解析
- Java 回调机制解析
- Java回调机制以及使用HibernateCallBack()接口的好处
- anroid 学习之java回调机制与自定义接口回调方法的使用
- Java回调机制解析
- Java回调机制解析
- [待修改]java接口用法:向上转型和回调函数 回调机制在 Android 监听用户界面操作中的体现
- Java回调机制解析
- 关于JAVA中的回调接口传值机制
- Java回调机制解析
- Java回调机制解析
- Java回调机制解析