Android中级:回调的使用

自定义按钮的点击事件的回调

1 步骤:

1 定义一个接口
2 在接口里面定义未实现的方法
3 传递一个实现了接口的对象
4 调用这个接口

2 案例:

2-1自定义的view:MyView

    package com.cqc.callbackdemo01;

    import android.content.Context;
    import android.util.AttributeSet;
    import android.view.View;

    public class MyView extends View{

        public MyView(Context context) {
            super(context);
        }

        //1 定义一个接口:
        public abstract interface OnClickListemer{
            //2 接口里面定义为实现逻辑的方法
            public abstract void print();
        }

        public OnClickListemer mOnClickListemer;

        //3 传递一个实现了接口的对象并赋值
        public void setOnClickListemer(OnClickListemer mOnClickListemer){
            this.mOnClickListemer = mOnClickListemer;
        }
    }

2-2 使用

MainActivity:
    package com.cqc.callbackdemo01;

    import com.cqc.callbackdemo01.MyView.OnClickListemer;

    import android.os.Bundle;
    import android.app.Activity;

    public class MainActivity extends Activity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            MyView myView = (MyView) findViewById(R.id.myView);
            // 4 调用实现接口的方法
            myView.setOnClickListemer(new OnClickListemer() {

                @Override
                public void print() {
                    // TODO Auto-generated method stub

                }

            });
        }

回调中使用回调

现在有这个需求:点击按钮后把phoneNumber和坐标一起发送到服务器,怎么做呢,我们知道获取坐标是异步的,采用的是回调,也就是我们必须在定位的回调走完后才可以网络请求。当我们把定位写在一个工具类中时,要想法Location发送到当前页,有3种方法。

第一种方法是用Handler

创建Handler对象,启动定位时,把handler也传递过去,定位成功后,用handler把location发送回来

第二种:EventBus传值

缺点:如果此时还有其它页面A没有finish(),而此时当前页B和A都用了EventBus来接收location,那么A和B都会接受到location,造成混乱。

方法三:定位回调中使用回调

当初写一个接口用来处理定位结果。

public interface LocateCallback {

    void exec(TraceLocation location);
}

把定位的方法放在一个方法A中,定位成功后,调用回调
如:这是百度鹰眼中获取当前位置中的回调,参数是回调接口

public static void getCurrentLocation2(final LocateCallback callback) {

    client.queryRealtimeLoc(serviceId, new OnEntityListener() {
        //请求失败回调接口
        @Override
        public void onRequestFailedCallback(String message) {
        }

        //Entity实时定位回调接口
        @Override
        public void onReceiveLocation(TraceLocation traceLocation) {
            super.onReceiveLocation(traceLocation);


            callback.exec(traceLocation);
        }
    });
}
BDTraceUtil.getCurrentLocation2(new LocateCallback() {
    @Override
    public void exec(TraceLocation location) {
        //根据location处理相关逻辑
    }
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值