android中必备的接口回调用法
1 ,这个方法很常见,本人觉得也很实用,分享下吧
public class DirverDistanceTool {
public void getDirverDistance(LatLng start, LatLng end,final OnDirverDistanceListener onDirverDistanceListener) {
RoutePlanSearch mSearch = RoutePlanSearch.newInstance();
mSearch.setOnGetRoutePlanResultListener(new OnGetRoutePlanResultListener() {
private DrivingRouteLine route;
public void onGetWalkingRouteResult(WalkingRouteResult result) {}//获取步行线路规划结果
public void onGetTransitRouteResult(TransitRouteResult result) {}//获取公交换乘路径规划结果
@Override
public void onGetMassTransitRouteResult(MassTransitRouteResult massTransitRouteResult) {}
public void onGetDrivingRouteResult(DrivingRouteResult result) {
if(result.error == SearchResult.ERRORNO.NO_ERROR && null != result && null != result.getRouteLines() && result.getRouteLines().size() > 0){
int distance = result.getRouteLines().get(0).getDistance();
BigDecimal bigDecimal = new BigDecimal(Double.valueOf(distance) / 1000);
if(null != onDirverDistanceListener)onDirverDistanceListener.dirverDistanceListener(bigDecimal.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue());
}else{
System.out.println("=============>抱歉,未计算出驾车距离...");
if(null != onDirverDistanceListener)onDirverDistanceListener.dirverDistanceListener(null);
}
}//获取驾车线路规划结果
@Override
public void onGetIndoorRouteResult(IndoorRouteResult indoorRouteResult) {}
@Override
public void onGetBikingRouteResult(BikingRouteResult bikingRouteResult) {}
});
mSearch.drivingSearch((new DrivingRoutePlanOption()).from(PlanNode.withLocation(start)).to(PlanNode.withLocation(end)));
}
public interface OnDirverDistanceListener{
void dirverDistanceListener(Double returnKm);
}
}
分析 :
这种方法是接口回调套接口回调,用来处理管理代码,让代码更有层次感
RoutePlanSearch mSearch = RoutePlanSearch.newInstance();
中有 onGetWalkingRouteResult(); onGetTransitRouteResult();
onGetMassTransitRouteResult(); onGetDrivingRouteResult()
onGetIndoorRouteResult(); onGetBikingRouteResult();
有六个方法如果都放在一个类中会让代码很臃肿,通过接口回调可以很的解决这个问题了 写了一个接口, 把 dirverDistanceListener ()抛到使用类中
public interface OnDirverDistanceListener{
void dirverDistanceListener(Double returnKm);
}
在使用的类中直接new,拿到了返回的 returnKm,
(new DirverDistanceTool()).getDirverDistance(start, end, new DirverDistanceTool.OnDirverDistanceListener() {
@Override
public void dirverDistanceListener(Double returnKm) {
if (null != deliveryPrice && null != returnKm && !TextUtils.isEmpty(minimun)) {
returnKM = returnKm;
price = deliveryPrice * returnKm * (isWeightHundred ? Integer.valueOf(minimun) : TextUtils.isEmpty(other_t.getText().toString()) ? 0 : Double.parseDouble(other_t.getText().toString().replace("吨", "")));
if (null != price)
delivery_price_text.setText((price > 0) ? "¥ " + DubString.keepPrecision(price + "", 2) : "0.00");
}//end of if
}
});
2.这个方法是基本用法
定义接口
public interface CallBackGetAddress {
public void editListener(int position);
public void deleteListener(int position);
}
通过构造方法传
private CallBackGetAddress callBack;
public AddressAdapter(Context context, CallBackGetAddress callBack) {
this.context = context;
this.callBack = callBack;
}
使用回调
vh.tvEdit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
callBack.editListener(i);
}
});
在类中使用直接implements AddressAdapter.CallBackGetAddress
重写
@Override
public void editListener(int position) {
BeanAdressList.Address address = list.get(position);
Bundle bundle = new Bundle();
bundle.putSerializable(AdressEditActivity.AdressDetail, address);
StephenToolUtils.startActivityNoFinish(activity, AdressEditActivity.class, bundle, Url.editAdress);
}
3.第三种实现方法,跟第二种差不多,是用activity实现的,比较简单粗暴
申明方法
private final PublishActivity publishActivity;
public ExpadnableAdapter(PublishActivity publishActivity) {
this.publishActivity = publishActivity;
}
把方法回调过去
publishActivity.changeExpandableListShow(groupPosition, isExpanded); 在activity中使用
public void changeGroupPrice(int groupPosition, float price) {//设置父项是否编辑,是否有价格
purchase_type.get(groupPosition).setEditing(false);
purchase_type.get(groupPosition).setCurPrice(price);
}
4. 通过set 来回调
private OnRightClickListener onRightClickListener; /**
* 右边图标点击的回调
*/
public interface OnRightClickListener {
void onClick(EditText editText);
} public void setOnRightClickListener(OnRightClickListener onRightClickListener) {
this.onRightClickListener = onRightClickListener;
}
很实用,个人项目中摘要
android中必备的接口回调用法的更多相关文章
- Android中callback(接口回调)机制
事实上,callback 机制在Android 中无处不在,特别是以Handler.Callback.Listener这三个词结尾的,都是利用callback机制来实现的.比方点击事件onClickL ...
- Android中添加监听回调接口的方法
在Android中,我们经常会添加一些监听回调的接口供别的类来回调,比如自定义一个PopupWindow,需要让new这个PopupWindow的Activity来监听PopupWindow中的一些组 ...
- Android中Context的总结及其用法
在android中我们经常遇到这样的情况,在创建一个对象的时候往往需要传递一个this参数,比如:语句 MyView mView = new MyView(this),要求传递一个this参数,这个t ...
- Android中的Parcelable接口和Serializable使用方法和差别
Parcelable接口: Interface for classes whose instances can be written to and restored from a Parcel. Cl ...
- Android中的Handler的具体用法
Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行.Android利用Handler来实现UI线程的更新的. Handler是Android中的消息发送器,其在哪个Activit ...
- Android中使用OnClickListener接口实现button点击的低级失误
今天写了几行极为简单的代码,就是想implements View.OnCLickListener.然后实现按钮点击操作.可是按钮却没有反应.找了五分钟还是没有结果. 下面是我的代码,希望大家不要嘲笑 ...
- java中Set类接口的用法
在Java中使用Set,可以方便地将需要的类型,以集合类型保存在一个变量中.主要应用在显示列表. Set是一个不包含重复元素的collection.更确切地讲,set 不包含满足 e1.equals( ...
- Android中的AlertDialog和ProgressDialog用法
手机APP对话框是很多APP都有的下面来看下怎么实现的吧, 打开Android studio 然他自动创建好布局和类; 下面我们修改activity_main.xml中的代码 <?xml ver ...
- Android 中的接口回调
http://blog.csdn.net/wangjinyu501/article/details/22052187 在Android中到处可见接口回调机制,尤其是UI事件处理方面.举一个最常见的 ...
随机推荐
- c++多态之——vptr指针
之前做过一个测试,在一个类中定义一个virtual修饰的函数时,sizeof这个类,发现类的大小多了恰好一个指针的字节大小,当初不明白,只是记住有这么一个特性.后来,发现它就是c++编译器给我们添加的 ...
- C中数组与指针【转】
在这里随便定义一个数组 int arr[5]; arr现在就是数组名, arr 代表的是该数组整块内存,即sizeof(arr) == 20 (假设sizeof(int) == 4), arr 里的内 ...
- Idea2016配置并破解jrebel
http://blog.csdn.net/my_chen_suo_zhang/article/details/72677772
- activemq用户手册
1 JMS 在介绍ActiveMQ之前,首先简要介绍一下JMS规范. 1.1 JMS的基本构件 1.1.1 连接工厂 连接工厂是客户用来创建连接的对象,例如ActiveMQ提供的ActiveMQCon ...
- [JavaScript]JS调用PHP和PHP调用JS的方法举例
http://blog.csdn.net/pleasecallmewhy/article/details/8592571 body { background: #C7EDCC !important; ...
- 动态标绘演示系统1.0(for OpenLayers3)
实现OpenLayers3(http://openlayers.org)版本号的动态标绘API.眼下1.0版本号,仅支持简单符号绘制. 在线体验地址:http://gispace.duapp.com/ ...
- 关于HFile的存储结构梳理以及快速定位rowkey
转自:http://blog.csdn.net/yangbutao/article/details/8394149 了解了布隆过滤器作用于HFile之上以及对HFile有了更深层次了解. 另有:htt ...
- 关于Unity中物理引擎的使用
物理引擎控制刚体,刚体上面贴上图片,所以看起来就是游戏运行起来的状态 物理世界计算刚体的运行状态,通过贴图显现出运算结果. 一.物理引擎 1:Unity 2D物理引擎基于Box2D封装而成;2: 物理 ...
- 关于Unity中的光照(一)
一.光源定义 光源,是一个普通节点加一个Light组件,创建的时候可以直接创建光源节点,也可以先创建一个空节点,再添加Light组件实例. 二.颜色形成 看到的物体颜色受两个很重要的因素的影响,一个是 ...
- Mac之安装zsh
1.安装homebrew ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/in ...