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. AIDL --- Android中的远程接口(1)
  2. Android ADB使用方法
  3. Android之Adapter:连接后端数据和前端显示的适配器接口
  4. Handle详解和使用方法
  5. Android下引用系统库的方法及问题
  6. 关于Zipalign的介绍和使用方法
  7. Android测试方法总结

随机推荐

  1. 一些关于 Activity 的技巧
  2. Android(安卓)应用程序快速启动的秘诀
  3. Unity3D研究院之与Android相互传递消息(十
  4. Android(安卓)ROM研究---制作Nexus S上的
  5. 面向 x86 的 Android* 入门指南
  6. android播放swf文件
  7. 安卓(android)开发应该怎么学?需要哪些基础
  8. Android应用程序基础知识
  9. Android高手进阶教程(二十五)之---Androi
  10. 【讲座】It's Android(安卓)Time:程序员创