Android的按钮监听事件&自定义回调函数
16lz
2021-01-23
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类去调用,这种机制就称为回调。
最近压力较大,结尾传递个正能量,只要努力,默默耕耘,必有成就!
更多相关文章
- AIDL --- Android中的远程接口(1)
- Android ADB使用方法
- Android之Adapter:连接后端数据和前端显示的适配器接口
- Handle详解和使用方法
- Android下引用系统库的方法及问题
- 关于Zipalign的介绍和使用方法
- Android测试方法总结