Java设计模式之Command在Android中的应用
2015-11-01 03:10
471 查看
1.概念:其实刚开始我也不是很理解这一模式。后面看到一些文章谈到Command模式的许多代码都是针对图形界面,它实际就是菜单命令。把这句话照搬到Android中,会发现我们经常做的一些如对点击事件的监听就是采用的这种模式:把对控件和对控件的事件处理分离开来,降低耦合性。它和适配器模式非常相似,只不过适配器是针对内容,而command是针对事件。
2.应用:android 中的点击监听事件就是command模式,对此我们也可以模仿源码来实现一个command模式。以系统Button的点击事件为原型,模仿自定义一个MyButton的设置点击监听事件。
a. 先看Button中的源码:
b.模仿button:
经过以上代码:MyButton就定义好了,现在在activity中调用该方法,看看能否响应点击事件:
看测试结果,说明OK.
2.应用:android 中的点击监听事件就是command模式,对此我们也可以模仿源码来实现一个command模式。以系统Button的点击事件为原型,模仿自定义一个MyButton的设置点击监听事件。
a. 先看Button中的源码:
public interface OnClickListener { /** * Called when a view has been clicked. * * @param v The view that was clicked. */ void onClick(View v); } public void setOnClickListener(OnClickListener l) { if (!isClickable()) { setClickable(true); } getListenerInfo().mOnClickListener = l; } public boolean performClick() { sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED); ListenerInfo li = mListenerInfo; if (li != null && li.mOnClickListener != null) { playSoundEffect(SoundEffectConstants.CLICK); li.mOnClickListener.onClick(this); return true; } return false; }
b.模仿button:
// 1.自定义一个接口: public interface onMyButtonClickListener { // 抽象的业务方法: public void mybusiness(); } // 2.添加监听器 private onMyButtonClickListener listener; public void setOnMyButtonClickListener(onMyButtonClickListener listener) { this.listener = listener; } @Override public boolean performClick() { // 点击button 按钮的时候,就会调用该方法: // 在此方法中,可以实现业务类:用接口实现,具体业务类分离出来 // 3.内部调用监听器:==》一定要调用 if (listener != null) { listener.mybusiness(); } return super.performClick(); }
经过以上代码:MyButton就定义好了,现在在activity中调用该方法,看看能否响应点击事件:
public class MainActivity extends Activity { private MyButton mButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mButton = (MyButton) findViewById(R.id.mybutton); mButton.setOnMyButtonClickListener(new onMyButtonClickListener() { @Override public void mybusiness() { Toast toast = Toast.makeText(getApplicationContext(), "响应点击事件", Toast.LENGTH_SHORT); toast.setGravity(Gravity.CENTER, 0, 0); toast.show(); } }); } }
看测试结果,说明OK.
相关文章推荐
- C#实现自定义双击事件
- WinForm实现自定义右下角提示效果的方法
- MFC自定义消息的实现方法
- C#实现ProperTyGrid自定义属性的方法
- asp中command的在单条记录时,有些字段显示为空的问题
- Delphi Command模式
- php自定义错误处理用法实例
- ThinkPHP中自定义目录结构的设置方法
- C#自定义事件监听实现方法
- C#自定义事件及用法实例
- C#自定义签名章实现方法
- C#中使用IFormattable实现自定义格式化字符串输出示例
- javascript 自定义常用方法第1/2页
- 谈谈JavaScript自定义回调函数
- 自定义jQuery插件方式实现强制对象重绘的方法
- jQuery实现自定义checkbox和radio样式
- jquery自定义插件开发之window的实现过程
- jQuery实现自定义事件的方法
- jQuery创建自定义的选择器用以选择高度大于100的超链接实例
- 教你如何自定义百度分享插件以及bshare分享插件的分享按钮