接口回调基础理解
来源:互联网 发布:东莞知美医院可靠吗 编辑:程序博客网 时间:2024/06/07 13:55
我们知道recyclerView是没有自带点击事件的,所以这里我们就拿给recyclerView添加点击事件为例。
ok 我们做好了一个简单的recycerView,但是此时点击他的条目是无效的,接下来我们为他添加自己定义的条目点击事件。
在适配器中加入:
//自定义公开接口,定义抽象方法 public interface onItemClickListener{ void onItemClick(int position,View itemView); } //创建接口类型变量(接受传值并设置事件) private onItemClickListener mOnItemClickListener; //暴露设置接口的方法 public void setOnItemClickListener(onItemClickListener mOnItemClickListener){ this.mOnItemClickListener = mOnItemClickListener; }
在适配器的onBindViewHolder方法中开始监听事件:
@Override public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) { final MyViewHolder viewHolder = (MyViewHolder) holder; viewHolder.textView.setText(datas.get(position)); if (position % 2 == 0){ viewHolder.textView.setTextColor(Color.BLUE); }else { viewHolder.textView.setTextColor(Color.RED); } if (mOnItemClickListener != null){ viewHolder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int pos = holder.getLayoutPosition(); mOnItemClickListener.onItemClick(pos,holder.itemView); } }); } }
最后一步就是在MainActivity中,实现onItemClickListener接口,设置监听,并实现抽象方法:
public class MainActivity extends AppCompatActivity implements MyAdapter.onItemClickListener
adapter.setOnItemClickListener(this);
@Override public void onItemClick(int position, View itemView) { Toast.makeText(MainActivity.this, "条目位置 :" + ( position + 1 ), Toast.LENGTH_SHORT).show(); }
OK,点击事件添加成功
很简单,很快,但是这个自己添加的点击事件,其中代码的执行过程大家清楚么?
按照代码的执行顺序,我们添加的代码第一句执行的就是:
adapter.setOnItemClickListener(this);这是调用了适配器设置监听的方法,this代表当前类,我们这里指的就是MainActivity,而这个方法定义的参数要求是一个我们自己定义的接口,所以我们要通过
MainActivity去实现OnItemClickListener接口,那么此时我们的MainActivity就也可以称作是OnItemClickListener类型。
将MainActivity传入后,就是将我们传入的值赋值给了自己定义的接口类型变量
//暴露设置接口的方法 public void setOnItemClickListener(onItemClickListener mOnItemClickListener){ this.mOnItemClickListener = mOnItemClickListener; }然后我们再来看一看这个自己定义的变量去做了什么:
这是添加在onBindViewHolder中的,在调用了setOnItemClickListener方法后,mOnItemClickListener就不为空,然后当viewholder的条目点击之后,我们的mOnItemClickListener就调用了自己的onItemClick方法。if (mOnItemClickListener != null){ viewHolder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int pos = holder.getLayoutPosition(); mOnItemClickListener.onItemClick(pos,holder.itemView); } }); }
开始思考:我们这里的mOnItemClickListener不为空,那么他的值是哪里来的呢?是谁呢? 没有错,就是我们的MainActivity,那么这里调用了onItemClick方法,实际上调用的就是MainActivity中实现的抽象方法onItemClick
@Override public void onItemClick(int position, View itemView) { Toast.makeText(MainActivity.this, "条目位置 :" + ( position + 1 ), Toast.LENGTH_SHORT).show(); }
至此,我们得以解惑,只要在MainActivity中,实现一个接口,就实现了RecyclerView的点击事件,也了解了这个代码的执行过程,不过有人可能会疑惑,点击事件我直接写在适配器中不好吗,这样MainActivity中的代码不是会更少,更简洁吗?
好,根据质疑,我将代码做了如上修改,确实,点击事件依然好用,但是接口回调就没有作用吗?那还要他干嘛。好了,我要提出需求了。
如果我们的需求是点击了一条目之后,修改MainActivity中一个控件(例如Button)的背景颜色,想一想,此时怎么操作?
可能还真有头铁的愣头青会说:可以在MainActivity中通过适配器的构造方法,把控件(例如Button)对象传到Adapter里面,很好,很有思想。但是我这里首先不说你违背了通俗的编程习惯(我没怎么见过把一个控件对象传来传去的),如果我要有100个控件要改变呢?
显然 100个夸张了一点,但是基本的设计模式,我们还是要遵循的,所以接口回调的好处,大家体会到了吗?
Demo下载
- 接口回调基础理解
- 接口回调-自己理解
- 浅理解接口回调
- 简单理解接口回调
- 接口回调机制理解
- Android 接口函数回调(callback)的基础使用方法与理解【回调】的具体实现
- Java回调接口的理解
- android中接口回调的理解
- Android回调接口简单理解
- Android接口回调深入理解
- 接口回调(重点是理解)
- 一个故事理解什么是接口回调
- Android对回调接口的理解
- 关于android接口回调的理解
- 对于接口回调的简单理解
- java中接口回调的理解
- Java基础之深入理解接口(interface)意义
- java基础梳理-【转】深入理解接口及抽象类
- Java编程思想第四版第三章练习
- oprofile性能分析优化程序
- Scala——基于Akka的并发编程和分布式应用程序开发
- MapReduce数据类型及自定义MapReduce数据类型
- physx 3.3.4中的 Revolute Joint
- 接口回调基础理解
- QVTKOpenGLWidget
- 路漫漫其修远兮,吾将上下而求索
- log4j过滤掉不必要的日志
- nginx1.12安装
- OpenStack deployed by SaltStack
- C++中cout格式化输出的相关函数与控制符
- java学习心得
- 网络编程(二) TCP报头