java Android 回调机制
2016-04-17 19:55
811 查看
Java回调机制 简单的来说就是将事件的处理(方法的具体实现)交由事件发起/处理对象本身来做处理。
举个例子 : 老师A交代给学生B一任务,老师A告诉学生B要做事情1,事情2,事情3.。。。(这里老师A交代的任务就像是定义了接口,老师A定义了其中的方法及事件123,比如老师告诉学生遇到问题可以上网查,可以去图书馆,任务完成后给我打电话告知,但怎么去图书馆查怎么打电话老师不告诉你)学生B去具体实施了事情1,事情2,事情3.。。。学生B具体去实施就是 学生B自己 用 自己的 方法 去做 老师A 告知的 事情123.。。。
其中代码的实现是在学习fragment时编写 借鉴了
https://www.baidu.com/baidu?tn=56060048_4_pg&ie=utf-8&ssl_s=1&ssl_c=ssl1_1542412d141&word=hongyang+fragment&searchRadio=on
Class ContentFragment 中创建了ContentFragmentListener接口,其中定义了一个方法onCBtnClick()方法 这个方法需要由实现接口的去实现
SecendFragment 定义了一个SecendFragmentClickListener 接口 其中定义了SButClick()方法 同时定义了一个setSFClicklistener方法 用来给其他类调用此方法时传入SecendFragmentClickListener 来调用SButClick()f方法
下面再看MainActivity,其中实现了ContentFragmentListener,SecendFragmentClickListener接口 并实现了对应的两个方法public void onCBtnClick() public void SButClick()两个方法,其中SBut中需要额外调用secendfrag.setSFClickListener(MainActivity.this);来使MainActicity中所实现的SbutClick()方法与secendfrag行程连接关系。从而达到回调
举个例子 : 老师A交代给学生B一任务,老师A告诉学生B要做事情1,事情2,事情3.。。。(这里老师A交代的任务就像是定义了接口,老师A定义了其中的方法及事件123,比如老师告诉学生遇到问题可以上网查,可以去图书馆,任务完成后给我打电话告知,但怎么去图书馆查怎么打电话老师不告诉你)学生B去具体实施了事情1,事情2,事情3.。。。学生B具体去实施就是 学生B自己 用 自己的 方法 去做 老师A 告知的 事情123.。。。
其中代码的实现是在学习fragment时编写 借鉴了
https://www.baidu.com/baidu?tn=56060048_4_pg&ie=utf-8&ssl_s=1&ssl_c=ssl1_1542412d141&word=hongyang+fragment&searchRadio=on
Class ContentFragment 中创建了ContentFragmentListener接口,其中定义了一个方法onCBtnClick()方法 这个方法需要由实现接口的去实现
public class ContentFragment extends Fragment implements OnClickListener { private Button CBut ; public interface ContentFragmentListener{ void onCBtnClick(); <span style="font-family: Arial, Helvetica, sans-serif;">//老师A想要学生要做的事情</span> } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.contentfragment, container, false); CBut = (Button) view.findViewById(R.id.cbtn); CBut.setOnClickListener(this); return view; } @Override public void onClick(View v) { if(getActivity() instanceof ContentFragmentListener){ ((ContentFragmentListener)getActivity()).onCBtnClick();//老师告知学生要去做事情了 } } }
SecendFragment 定义了一个SecendFragmentClickListener 接口 其中定义了SButClick()方法 同时定义了一个setSFClicklistener方法 用来给其他类调用此方法时传入SecendFragmentClickListener 来调用SButClick()f方法
public class SecendFragment extends Fragment implements OnClickListener{ private SecendFragmentClickListener sfcl; private Button Sbut; public interface SecendFragmentClickListener{ void SButClick();//老师想要学生要做的事情 } public void setSFClickListener(SecendFragmentClickListener sfcl){ this.sfcl = sfcl; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.secendfragment, container, false); Sbut = (Button) view.findViewById(R.id.sbtn); Sbut.setOnClickListener(this); return view; } @Override public void onClick(View v) { if(sfcl!=null){ sfcl.SButClick();//老师告知学生要去做这些事情 } } }
下面再看MainActivity,其中实现了ContentFragmentListener,SecendFragmentClickListener接口 并实现了对应的两个方法public void onCBtnClick() public void SButClick()两个方法,其中SBut中需要额外调用secendfrag.setSFClickListener(MainActivity.this);来使MainActicity中所实现的SbutClick()方法与secendfrag行程连接关系。从而达到回调
public class MainActivity extends Activity implements ContentFragmentListener,SecendFragmentClickListener{//学生接到任务去做事情 private ImageButton imageBut1, imageBut2; private ContentFragment contentfrag = null; private SecendFragment secendfrag = null; private ThirdFragment thirdfrag = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); setDefaultFragment(); } private void setDefaultFragment(){ FragmentManager fm =getFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); contentfrag = new ContentFragment(); ft.add(R.id.id_content, contentfrag, "CONTENT"); ft.commit(); } @Override public void SButClick() {//学生按照自己的办法将老师交代的事情完成 // TODO Auto-generated method stub if(secendfrag==null){ secendfrag = new SecendFragment(); secendfrag.setSFClickListener(MainActivity.this); } FragmentManager fm = getFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); ft.hide(contentfrag); ft.add(R.id.id_content, secendfrag, "TWO"); ft.addToBackStack(null); ft.commit(); } @Override public void onCBtnClick() {<span style="font-family: Arial, Helvetica, sans-serif;">//学生按照自己的办法将老师交代的事情完成</span> if(thirdfrag==null){ thirdfrag = new ThirdFragment(); } FragmentManager fm = getFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); ft.hide(secendfrag); ft.add(R.id.id_content, thirdfrag, "THREE"); ft.addToBackStack(null); ft.commit(); }
相关文章推荐
- Android TV开发--实现延时关机功能(二)逻辑实现
- Android组件之服务---Service
- 移动终端播放器的探索历程
- Android课程---关于数据存储的学习(3)之数据库和事务
- Android深入透析之常用设计模式经验谈
- 使用Adreno Profiler分析android游戏
- Android课程---关于数据存储的学习(2)
- Android SQLiteOpenHelper使用
- Android课程---添加黑名单的练习2(课堂讲解)
- Xamarin.Android再体验之简单的登录Demo
- android6.0中permission授予机制的改变
- OpenCV在Android平台上的应用
- Android横竖屏切换继续播放视频
- Android 6.0运行时权限小结
- Android TextView 实现文字大小不同和文字颜色不同
- Android-Sqlite使用手册
- Android中的对话框
- Android WiFi调式工具WiFi ADB的使用
- Android_ListView
- Android Studio创建数据库表的一个问题