1 ,这个方法很常见,本人觉得也很实用,分享下吧

  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;
  2.  
  3. public void onGetWalkingRouteResult(WalkingRouteResult result) {}//获取步行线路规划结果
  4.  
  5. public void onGetTransitRouteResult(TransitRouteResult result) {}//获取公交换乘路径规划结果
  6.  
  7. @Override
    public void onGetMassTransitRouteResult(MassTransitRouteResult massTransitRouteResult) {}
  8.  
  9. 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);
    }
    }//获取驾车线路规划结果
  10.  
  11. @Override
    public void onGetIndoorRouteResult(IndoorRouteResult indoorRouteResult) {}
  12.  
  13. @Override
    public void onGetBikingRouteResult(BikingRouteResult bikingRouteResult) {}
    });
    mSearch.drivingSearch((new DrivingRoutePlanOption()).from(PlanNode.withLocation(start)).to(PlanNode.withLocation(end)));
    }
  14.  
  15. public interface OnDirverDistanceListener{
    void dirverDistanceListener(Double returnKm);
    }
    }
  16.  
  17. 分析 :
    这种方法是接口回调套接口回调,用来处理管理代码,让代码更有层次感
  1. RoutePlanSearch mSearch = RoutePlanSearch.newInstance();
                      中有 onGetWalkingRouteResult(); onGetTransitRouteResult();
                       onGetMassTransitRouteResult(); onGetDrivingRouteResult()
                      onGetIndoorRouteResult(); onGetBikingRouteResult();
                      有六个方法如果都放在一个类中会让代码很臃肿,通过接口回调可以很的解决这个问题了
  2.  
  3. 写了一个接口, dirverDistanceListener ()抛到使用类中
  1. public interface OnDirverDistanceListener{
    void dirverDistanceListener(Double returnKm);
    }
  2.  
  3. 在使用的类中直接new,拿到了返回的 returnKm,
  1. (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
    }
    });
  1. 2.这个方法是基本用法
    定义接口
      public interface CallBackGetAddress {
      public void editListener(int position);
      public void deleteListener(int position);
    }
  1. 通过构造方法传
  1. private CallBackGetAddress callBack;
  1. public AddressAdapter(Context context, CallBackGetAddress callBack) {
    this.context = context;
    this.callBack = callBack;
    }
  1. 使用回调
  1. vh.tvEdit.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
    callBack.editListener(i);
    }
    });
  2.  
  3. 在类中使用直接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);
    }
  4.  
  5. 3.第三种实现方法,跟第二种差不多,是用activity实现的,比较简单粗暴
    申明方法
  1. private final PublishActivity publishActivity;
  1. public ExpadnableAdapter(PublishActivity publishActivity) {
    this.publishActivity = publishActivity;
    }
  2.  
  3. 把方法回调过去
  1. publishActivity.changeExpandableListShow(groupPosition, isExpanded);
  2.  
  3. activity中使用
  1. public void changeGroupPrice(int groupPosition, float price) {//设置父项是否编辑,是否有价格
    purchase_type.get(groupPosition).setEditing(false);
    purchase_type.get(groupPosition).setCurPrice(price);
    }
  1. 4. 通过set 来回调
  1. private OnRightClickListener onRightClickListener;
  2.  
  3. /**
    * 右边图标点击的回调
    */
    public interface OnRightClickListener {
    void onClick(EditText editText);
    }
  4.  
  5. public void setOnRightClickListener(OnRightClickListener onRightClickListener) {
    this.onRightClickListener = onRightClickListener;
    }
  1. 很实用,个人项目中摘要
  1.  

android中必备的接口回调用法的更多相关文章

  1. Android中callback(接口回调)机制

    事实上,callback 机制在Android 中无处不在,特别是以Handler.Callback.Listener这三个词结尾的,都是利用callback机制来实现的.比方点击事件onClickL ...

  2. Android中添加监听回调接口的方法

    在Android中,我们经常会添加一些监听回调的接口供别的类来回调,比如自定义一个PopupWindow,需要让new这个PopupWindow的Activity来监听PopupWindow中的一些组 ...

  3. Android中Context的总结及其用法

    在android中我们经常遇到这样的情况,在创建一个对象的时候往往需要传递一个this参数,比如:语句 MyView mView = new MyView(this),要求传递一个this参数,这个t ...

  4. Android中的Parcelable接口和Serializable使用方法和差别

    Parcelable接口: Interface for classes whose instances can be written to and restored from a Parcel. Cl ...

  5. Android中的Handler的具体用法

    Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行.Android利用Handler来实现UI线程的更新的. Handler是Android中的消息发送器,其在哪个Activit ...

  6. Android中使用OnClickListener接口实现button点击的低级失误

    今天写了几行极为简单的代码,就是想implements  View.OnCLickListener.然后实现按钮点击操作.可是按钮却没有反应.找了五分钟还是没有结果. 下面是我的代码,希望大家不要嘲笑 ...

  7. java中Set类接口的用法

    在Java中使用Set,可以方便地将需要的类型,以集合类型保存在一个变量中.主要应用在显示列表. Set是一个不包含重复元素的collection.更确切地讲,set 不包含满足 e1.equals( ...

  8. Android中的AlertDialog和ProgressDialog用法

    手机APP对话框是很多APP都有的下面来看下怎么实现的吧, 打开Android studio 然他自动创建好布局和类; 下面我们修改activity_main.xml中的代码 <?xml ver ...

  9. Android 中的接口回调

    http://blog.csdn.net/wangjinyu501/article/details/22052187   在Android中到处可见接口回调机制,尤其是UI事件处理方面.举一个最常见的 ...

随机推荐

  1. qt离线下载

    http://www.qtcn.org/bbs/read-htm-tid-1075.html

  2. 教程-在Delphi中怎么查看是否有内存泄漏(Delphi2007)+WIN7

    相关资料:1.http://bbs.csdn.net/topics/390630932?page=1 PS:1.本实例D2007及以上版本支持.2.检测内存工具 EurekaLog fastmm 实例 ...

  3. php结合msf反弹内网shell

    感谢: perl6大佬分享的姿势. MSF: msf > use payload/php/bind_phpmsf exploit(handler) > set PAYLOAD payloa ...

  4. u-boot 2016.05 添加自己的board 以及config.h

    拿到一个uboot 后,我都想添加一个属于自己的board文件以及include/configs/*.h 文件. 如何添加这个些文件,今天来记录一下. 复制一份你所参考的板级文件,比如说board/v ...

  5. linux 共享内存shm_open实现进程间大数据交互

    linux 共享内存shm_open实现进程间大数据交互 read.c #include <sys/types.h> #include <sys/stat.h> #includ ...

  6. ansible 的user模块

    user模块与group模块 user模块是请求的是useradd, userdel, usermod三个指令,goup模块请求的是groupadd, groupdel, groupmod 三个指令. ...

  7. Workerman

    What is it Workerman is a library for event-driven programming in PHP. It has a huge number of featu ...

  8. CentOS下添加sudo用户

    一 .sodo的使用 1.1 关于sudo Sudo是linux系统中,非root权限的用户提升自己权限来执行某些特性命令的方式,它使普通用户在不知道超级用户的密码的情况下,也可以暂时的获得root权 ...

  9. CentOS7下Tomcat启动慢的原因及解决方案

    现象 在一次CentOS 7系统中安装Tomcat,启动过程很慢,需要几分钟,经过查看日志,发现耗时在这里:是session引起的随机数问题导致的.Tocmat的Session ID是通过SHA1算法 ...

  10. mysql分组取每组大的记录

    SELECT a.* FROM chat_log a INNER JOIN (SELECT MAX(id) id,to_user FROM chat_log GROUP BY to_user)b ON ...