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

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类去调用,这种机制就称为回调。
最近压力较大,结尾传递个正能量,只要努力,默默耕耘,必有成就!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值