Java回调机制(以Android事件监听器为例)
来源:互联网 发布:电信网络电视报修电话 编辑:程序博客网 时间:2024/05/20 07:15
Java的设计模式中有回调这个机制,在Android开发中我们也会经常用到回调机制。下面就通过一些小例子来说明什么是回调。
假如我们要实现这个这样一个功能。
MainActivity中由一个Fragment和一个ViewPager构成,Fragment中有一系列按钮,通过按下这些按钮可以来切换ViewPager的当前页卡,一般我们会这么实现。
首先在Fragment中获得MainActivity。
private MainActivity activity;//Frgament的成员变量@Overridepublic void onStart() {//Fragment的onStart方法 super.onStart(); activity = (MainActivity) getActivity();}
然后再Fragment中的button的点击事件中,获取activity中的ViewPager实例,然后执行setcurrentItem()方法。
mViewHolder.item1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { activity.mViewPager.setCurrentItem(2); }});
这样做我们就实现了功能。
接下来,同样的功能,我们如果使用回调机制的话。是这样实现的。
首先写一个接口。
public interface OnToolBarSelectListener { public void onSelect(int postion);}
看名字就知道了,在按钮按下的时候的监听器。
然后在MainActivity中实现这个接口。
public class MainActivity extends Activity implements OnToolBarSelectListener { private Context mContext; private ViewPager mViewPager; private ToolBarFragment toolBarFragment; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mContext = this; } @Override public void onSelect(int position) { mViewPager.setCurrentItem(position); }}
同时在Fragment中,我们要获取MainActivity。同时在控件的点击事件中执行接口中的方法。
public class ToolBarFragment extends BaseFragment implements OnViewPagerSlideListener { private MainActivity activity; private OnToolBarSelectListener mOnToolBarSelectListener; public void setOnToolBarSelectListener(OnToolBarSelectListener mOnToolBarSelectListener) { this.mOnToolBarSelectListener = mOnToolBarSelectListener; } @Override public void onStart() { super.onStart(); this.setOnToolBarSelectListener((MainActivity) getActivity()); mViewHolder.item1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mOnToolBarSelectListener.onSelect(1); } }); }}
首先MainActivity实现了接口,然后在onSelect方法中做好点击之后要做的事情。
然后在Fragment中,获得这个接口的实例,并在相应的地方处理(点击事件监听中)。
在本例中,其实OnToolBarSelectListener是没有必要写set方法的,因为直接就在Frgament中处理了,但是如果需要换别的地方处理,一个set方法可以让你的程序更有条理。
后面的解决方案在当前需求的情况下,的确有些画蛇添足了。
但是这样的做法的确是遵循了JAVA的设计模式,在需求情况比较复杂的情况下这么写,代码的维护性会很高。
参考:http://blog.csdn.net/xiaanming/article/details/8703708/
http://blog.csdn.net/pi9nc/article/details/23169357
- Java回调机制(以Android事件监听器为例)
- 以ontouch为例说明android事件发送机制
- 接口回调,以Android的事件监听为例
- Android基于事件监听器处理机制
- 以按键事件为例阐述消息传递机制
- nginx中的事件响应机制(以epoll为例)
- Java事件处理机制-事件监听器的实现方式
- Java事件处理机制-事件监听器的实现方式
- Java事件处理机制-事件监听器的实现方式
- Android笔记二十三.Android基于事件监听器处理机制
- Android笔记Android基于事件监听器处理机制
- Android笔记二十三.Android基于事件监听器处理机制
- Java回调理解,以Android中Button为例
- Java反射机制(以数据库读取为例)
- Android中的接口回调详解,回调机制:以Activity和Adapter传递数据为例。
- 好程序员笔记--Android基于事件监听器处理机制
- java事件机制包括三个部分:事件、事件监听器、事件源
- java事件机制包括三个部分:事件、事件监听器、事件源
- 安装cdh
- oracle语句整理,方便自己查看。
- 关于ctags跟踪代码的总结
- sql, group by 对数据进行分组
- 电脑硬件那点事(1)
- Java回调机制(以Android事件监听器为例)
- typedef和#define的用法与区别
- leetCode之 Two Sum
- iOS代码规范
- 【OpenGL】二次曲面图
- Lowest Common Ancestor of a Binary Tree
- JVM调优总结 -Xms -Xmx -Xmn -Xss等
- Fragment里嵌套Fragment之间的切换
- jira配置通知方案后,创建问题是无法收到邮件