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重写@Overridepublic 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);}
很实用,个人项目中摘要
 
时间: 2024-10-09 21:13:40

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

Android中callback(接口回调)机制

事实上,callback 机制在Android 中无处不在,特别是以Handler.Callback.Listener这三个词结尾的,都是利用callback机制来实现的.比方点击事件onClickListener就是一个已经封装好的callback案例: tv.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub

Android中的Parcelable接口

Android中的android.os.Parcelable接口用于替代Java序列化Serializable接口,Fragment以及Activtity之间都需要传递数据,有时甚至包含结构非常复杂的对象,这就需要先将这个对象序列化成二进制流,然后再进行传递了. 比如Fragment1向Fragment2传递数据,下面是Fragment1中创建Fragment2并传送数据的方法: Fragment2 fragment = new Fragment2(); Bundle bundle = new 

Android中的Handler的具体用法

Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行.Android利用Handler来实现UI线程的更新的. Handler是Android中的消息发送器,其在哪个Activity中创建就属于且紧紧属于该Activity.还可以说其在哪个线程中new的,就是那个线程的Handler. Handler的定义: 主要接受子线程发送的数据, 并用此数据配合主线程更新UI. 解释: 当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的U

Android中的网络技术基础用法

有的时候用多了Android的一些开源框架用多了,就会把最基础的一些东西给忘了,今天来重温一下Android的网络基础.包括这个Http协议的网络请求,JSON解析. 使用HTTP协议访问网络 在 Android上发送 HTTP 请求的方式一般有两种,HttpURLConnection 和 HttpClient,先来看一下 HttpURLConnection 的用法.首先需要获取到 HttpURLConnection 的实例,一般只需 new出一个 URL 对象,并传入目标的网络地址,然后调用一

Android中Context的总结及其用法

在语句 android中我们经常遇到这样的情况,在创建一个对象的时候往往需要传递一个this参数,比如:语句 MyView mView = new MyView(this),要求传递一个this参数,这个this究竟指的是什么东西呢? 其实这里的this指的就是当前的Activity.this,是这个语句所在的Activity的this.Activity.this取的是这个Activity的Context,那么这个Context究竟是什么东西呢?它起到什么作用呢? Context 按照英文字面意

Android中的Parcelable接口和Serializable用法和区别

Parcelable接口: Interface for classes whose instances can be written to and restored from a Parcel. Classes implementing the Parcelable interface must also have a static field called CREATOR, which is an object implementing the Parcelable.Creator inter

Android中使用OnClickListener接口实现按钮点击的低级失误

今天写了几行极为简单的代码,就是想implements  View.OnCLickListener.然后实现按钮点击操作.但是按钮却没有反应,找了五分钟还是没有结果. 以下是我的代码,希望大家不要嘲笑: XML布局如下: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:la

学习Android中的Parcelable接口

接触安桌不久,在之后很长的一段时间我将会一直在研究安桌开发.只是为了实现一下自己的想法. 1.首先要说parcelable之前必须要说一下,Serializable接口.看了很多教程,在说Activity数值传递的过程便是要先说Serializable接口,然后才是parvelable接口.两个接口相类似,有什么区别? Parcelable和Serializable的作用.效率.区别及选择: 1.作用 Serializable的作用是为了保存对象的属性到本地文件.数据库.网络流.rmi以方便数据

Android中属性动画的基本用法

在开发中属性动画是很常用的功能,下面我把属性动画的基本用法记录一下,供他人学习,也逐渐积累自己的知识. 单个动画效果: //创建动画对象,后面的参数依次为:动画效果的目标组件,需要改变的该组建的属性(必须有对应的get和set方法就可以),后面三个参数写变化过程对应数值. ObjectAnimator animator= ObjectAnimator.ofFloat(textView, "TextSize", 15, 50, 15); //动画过程所用时间,会按这个世界自动平滑执行 a