接口下多个实现方法的解决方案
来源:互联网 发布:电子听诊器 分析软件 编辑:程序博客网 时间:2024/06/07 10:57
在实际开发中,我们经常遇到这样的问题:有时我们需要实现一个接口,却不得不实现一下该接口中所有的抽象方法,即使我们用不到这些方法。在开发中多遇到的便是:
vpContent.setOnPageChangeListener(new OnPageChangeListener() {@Overridepublic void onPageSelected(int position) {mPagerList.get(position).initData();}@Overridepublic void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {// TODO Auto-generated method stub}@Overridepublic void onPageScrollStateChanged(int state) {// TODO Auto-generated method stub}});即使onPageScrolled方法和onPageScrollStateChanged我们什么也不做。但是这样遇到的问题是代码显得太啰嗦。
更有甚者,有的接口的实现方法太多了,很多我们可能只需要其中的一个方法。诸如百度地图的API:
search.init(manager, new MKSearchListener() {@Overridepublic void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) {// TODO Auto-generated method stub}@Overridepublic void onGetPoiDetailSearchResult(int arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetAddrResult(MKAddrInfo arg0, int arg1) {// TODO Auto-generated method stub}});有没有头大的赶脚?别着急,其实在android api中已经有个这样问题的解决方案。
OK,打开ViewPager.java,于是我们可以看到在ViewPager一下源码:
/** * Callback interface for responding to changing state of the selected page. */ public interface OnPageChangeListener { /** * This method will be invoked when the current page is scrolled, either as part * of a programmatically initiated smooth scroll or a user initiated touch scroll. * * @param position Position index of the first page currently being displayed. * Page position+1 will be visible if positionOffset is nonzero. * @param positionOffset Value from [0, 1) indicating the offset from the page at position. * @param positionOffsetPixels Value in pixels indicating the offset from position. */ public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels); /** * This method will be invoked when a new page becomes selected. Animation is not * necessarily complete. * * @param position Position index of the new selected page. */ public void onPageSelected(int position); /** * Called when the scroll state changes. Useful for discovering when the user * begins dragging, when the pager is automatically settling to the current page, * or when it is fully stopped/idle. * * @param state The new scroll state. * @see ViewPager#SCROLL_STATE_IDLE * @see ViewPager#SCROLL_STATE_DRAGGING * @see ViewPager#SCROLL_STATE_SETTLING */ public void onPageScrollStateChanged(int state); }在这些代码后,我们也可以看到:
/** * Simple implementation of the {@link OnPageChangeListener} interface with stub * implementations of each method. Extend this if you do not intend to override * every method of {@link OnPageChangeListener}. */ public static class SimpleOnPageChangeListener implements OnPageChangeListener { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { // This space for rent } @Override public void onPageSelected(int position) { // This space for rent } @Override public void onPageScrollStateChanged(int state) { // This space for rent } }
简单翻译一下:SimpleOnPageChangeListener是对OnPageChangeListener的简单实现,如果你不需要实现OnPageChangeListener中的每一个方法,可以继承这个类。
针对百度地图API中特别复杂的MKSearchListener,于是我们便可以做一个简单的实现类了。代码如下:
protected class MyMKSearchListener implements MKSearchListener {@Overridepublic void onGetAddrResult(MKAddrInfo result, int iError) {// TODO Auto-generated method stub}@Overridepublic void onGetBusDetailResult(MKBusLineResult result, int iError) {// TODO Auto-generated method stub}@Overridepublic void onGetDrivingRouteResult(MKDrivingRouteResult result, int iError) {// TODO Auto-generated method stub}@Overridepublic void onGetPoiDetailSearchResult(int type, int iError) {// TODO Auto-generated method stub}@Overridepublic void onGetPoiResult(MKPoiResult result, int type, int iError) {// TODO Auto-generated method stub}@Overridepublic void onGetSuggestionResult(MKSuggestionResult result, int iError) {// TODO Auto-generated method stub}@Overridepublic void onGetTransitRouteResult(MKTransitRouteResult result, int iError) {// TODO Auto-generated method stub}@Overridepublic void onGetWalkingRouteResult(MKWalkingRouteResult result, int iError) {// TODO Auto-generated method stub}}OK。编写完成。
这也是24设计模式中比较简单的一个设计模式的简单实现-适配器设计模式。有时间自己研究一下。
0 0
- 接口下多个实现方法的解决方案
- 实现接口的第二方法
- HttpServletRequest接口中的getMethod()方法的实现
- MyEclipse 查找接口实现类的方法
- ServletContextListener接口需要实现的方法
- myeclipse实现接口方法的快捷键
- 接口、实现类和方法的调用
- 如何选择性的实现接口中方法
- JDBC Statement接口实现的execute方法
- js接口的方式实现模板方法
- Android中Parcelable接口的实现方法
- 开发web service的接口实现方法
- 接口实现类方法的回调
- caffe的matlab接口实现方法
- 远程调用webservice接口的实现方法
- Java中接口的定义与实现接口抽象方法
- Java中接口的定义与实现接口抽象方法
- Java中接口定义及实现接口的抽象方法
- Deep Learning的训练工具~caffe
- 存储过程 视图 触发器 分页
- android全屏去掉title栏的多种实现方法
- Accepted Necklace
- 算法竞赛入门经典:第七章 暴力求解法 7.18 广度优先搜索之八数码问题
- 接口下多个实现方法的解决方案
- C# 静态类
- [C++11] 默认构造函数
- pdf文件怎么编辑
- 排名(hdu 1236)
- 算法竞赛入门经典:第七章 暴力求解法 7.18八数码问题之哈希去重
- Appium 的安装启动
- 【STL容器学习笔记】-顺序容器
- JQuery autocomplete ajax 实现自动完成