文章类型: ANDROID
关键词: Java,回调机制,事件,监听器,android,JAVA,设计模式
内容摘要: Java回调机制(以Android事件监听器为例)

Java回调机制(以Android事件监听器为例)

2017/9/12 17:38:33    来源:apple    阅读:

Java的设计模式中有回调这个机制,在Android开发中我们也会经常用到回调机制。下面就通过一些小例子来说明什么是回调。

 

假如我们要实现这个这样一个功能。

MainActivity中由一个Fragment和一个ViewPager构成,Fragment中有一系列按钮,通过按下这些按钮可以来切换ViewPager的当前页卡,一般我们会这么实现。

首先在Fragment中获得MainActivity。

private MainActivity activity;//Frgament的成员变量  
@Override  
public 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中接口的定义和接口的实现 关键词:java中接口的定义和接口的实现 发布日期:2017/9/12 17:34:58
↓ 下一篇文章:win server 2003 X64安装.NET4.0遇到阻滞问题解决 关键词:win,server,2003,X64安装.NET4.0.. 发布日期:2017/9/20 11:16:28
相关文章:
Java设计模式之单例模式及在Android中的重要使用 关键词:Java,设计模式,单例模式,Android,重要使用 发布日期:2017-09-12 17:13
基于Java的TCP Socket通信详解(计算机端/Android手机端) 关键词:基于Java的TCP,Socket通信详解(计算机端/Android手机端) 发布日期:2017-03-21 16:44
JavaScript 和 .NET 中的 JSON 关键词:js,JavaScript,.net,C#,json 发布日期:2015-07-14 17:26
相关目录:.NETANDROIDJAVA软件开发
我要评论
正在加载评论信息......