Android的按钮监听事件&自定义回调函数

在写代码时总是要用上回调函数,一直都是把怎么用背下来,没有很好理解,今天下决心查阅资料加上平时写的代码,梳理一番
我们先来看Button的监听机制:android对一些imageView,Button等组件设置了监听机制,当我们对组件进行点击时,回调onClick方法:

    //第一种方式        Button Btn1 = (Button)findViewById(R.id.button1);//获取按钮资源        Btn1.setOnClickListener(new Button.OnClickListener(){//创建监听            public void onClick(View v) {                String strTmp = "点击Button01";                Ev1.setText(strTmp);            }        });        //第二种方式        Button Btn2 = (Button) findViewById(R.id.button2);//获取按钮资源        Btn2.setOnClickListener(listener);//设置监听    }       //此类实现implements View.OnClickListener,回调onClick方法     @override     public void onClick(View v){            String strTmp="点击Button02";            Ev1.setText(strTmp);        }    

接下来我们来看自定义回调函数怎么实现,在我的代码经验中,回调用得最多的时候有俩种:1.自定义View的UI类中定义接口,设置方法把接口暴露给调用者。2.在写RecyclerView时,在其适配器中对其Item(理解为每一行)的组件进行监听,或是对整个Item进行监听。接下来我们看这俩种实现:
//第二种实现

private  OnCampaignClickListener mListener;//定义接口,不考虑方法实现,方法实现由调用者去考虑public  interface OnCampaignClickListener{    void onClick(View view,Campaign campaign);}//暴露一个方法给调用者来注册接口回调,通过接口来获得回调者对接口方法的实现public void setOnCampaignClickListener(OnCampaignClickListener listener){    this.mListener = listener;} imageViewBig.setOnClickListener(this); imageViewSmallTop.setOnClickListener(this); imageViewSmallBottom.setOnClickListener(this);        //对这些组件的点击事件设置点击效果    @Override    public void onClick( View v) {        anim(v);    }        //**为三个组件添加点击事件,调用接口中的方法,待需要回调时,会有具体的实现**      private void anim(final  View v){          //通过ObjectAnimator设置动画属性          ObjectAnimator animator = ObjectAnimator.ofFloat(v,"rotationX",0.0F,360.0F)                  .setDuration(200);          animator.addListener(new AnimatorListenerAdapter() {              //动画效果结束后回调              @Override              public void onAnimationEnd(Animator animation) {                  super.onAnimationEnd(animation);                  HomeCampaign homeCampaign = mDatas.get(getLayoutPosition());                  if(mListener !=null){                      switch (v.getId()){                          case  R.id.imgview_big:                              mListener.onClick(v,homeCampaign.getCpOne());                              break;                          case  R.id.imgview_small_top:                              mListener.onClick(v,homeCampaign.getCpTwo());                              break;                          case  R.id.imgview_small_bottom:                              mListener.onClick(v,homeCampaign.getCpThree());                              break;                      }                  }              }          });          animator.start();      }}**实现接口回调****调用者需要实现接口,完成接口的方法,将接口对象传入到被调用者暴露出来的注册方法中,从而完成回调** //对商品拥有点击事件,跳转到WareListActivity    mAdatper.setOnCampaignClickListener(new HomeCatgoryAdapter.OnCampaignClickListener() {        @Override        public void onClick(View view, Campaign campaign) {            Intent intent = new Intent(getContext(), WareListActivity.class);            //把value值传入intent,key需要用常量来标记            intent.putExtra(Constants.COMPAINGAIN_ID,campaign.getId());            startActivity(intent);        }    });

下面对回调这个概念进行总结,所谓回调函数就是:在A类中定义了一个方法,这个方法中用到了一个接口和该接口中的抽象方法,但是抽象方法没有具体实现,需要B类去实现,B类实现该方法后,本身不会去调用该方法,而是传递给A类,供A类去调用,这种机制就称为回调。
最近压力较大,结尾传递个正能量,只要努力,默默耕耘,必有成就!

更多相关文章

  1. Android应用Preference相关及源码浅析(SharePreferences篇)
  2. Android:最全面的 Webview 详解
  3. Android高级应用2----ContentProvider(访问手机短信和通讯录数据)
  4. 2014-11-8Android学习------Android(安卓)实现图片的旋转-------
  5. 打造android ORM框架opendroid(六)——级联查询
  6. Android小項目之---ListView实现论坛管理效果
  7. Android中各种JAVA包的功能描述
  8. 浅谈Java中Collections.sort对List排序的两种方法
  9. Python list sort方法的具体使用

随机推荐

  1. SQL查询语句
  2. 后台一 搭建项目
  3. 后台四 菜单列表
  4. markdown标记语言
  5. TP6 linux安装方法
  6. ThinkPHP的使用笔记:验证码的使用和sessio
  7. U盘插入台式电脑时显示请将磁盘插入驱动
  8. laravel-admin 初次使用安装教程
  9. 后台三 账号列表
  10. 后台二 项目流程(阅读)