- 浏览: 580450 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (338)
- 已过时文章(留念用) (39)
- Android学习笔记 (30)
- Android开发指引自译 (100)
- Android NDK文档自译 (23)
- Android设计指引自译 (2)
- xp(ペケピー)&linux(理奈、铃)酱~ (4)
- ui酱&歌词自译~ (9)
- lua酱~ (9)
- 自我反省 (1)
- 羽game计划 (1)
- XSL酱 (2)
- java酱 (3)
- 设计的领悟 (58)
- 涂鸦作品(pixiv) (1)
- ruby酱 (2)
- Objective-C编程语言自译 (2)
- Android开发月报 (6)
- objc酱 (2)
- photoshop (3)
- js酱 (6)
- cpp酱 (8)
- antlr酱 (7)
- Lua 5.1参考手册自译 (11)
- 收藏品 (3)
- 待宵草计划 (4)
- 体验版截图 (1)
最新评论
-
naruto60:
太给力了!!!!我这网打不开Intel官网,多亏楼主贴了连接, ...
使用HAXM加速的Android x86模拟器(和一些问题) -
yangyile2011:
谢谢博主,翻译得很好哦
【翻译】(4)片段 -
ggwang:
牙痛的彼岸:痹!
牙痛的彼岸 -
ggwang:
总结得很简练清晰啊,学习了!
ANTLR学习笔记一:概念理解 -
leisurelife1990:
mk sdd
用git下载Android自带app的源代码
我想用PureMVC for Java实现这样一个Android程序:点击按钮,在两个EditText中显示一些内容和点击总次数。
于是,我开始写了(当然这是我最后修改的正常版):
res/layout/main.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <EditText android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="wrap_content" android:editable="false"> </EditText> <EditText android:id="@+id/editText2" android:textColor="#FF0000" android:layout_width="match_parent" android:layout_height="wrap_content" android:editable="false"> </EditText> <Button android:id="@+id/button1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Button" /> </LinearLayout>
表面类:
package com.iteye.weimingtom.pmvc.test; import org.puremvc.java.interfaces.IFacade; import org.puremvc.java.patterns.facade.Facade; import android.widget.EditText; public class MyFacade extends Facade implements IFacade { public MyFacade() { this.registerCommand(SetTextCommand.NAME, new SetTextCommand()); this.registerMediator(new TextMediator()); this.registerMediator(new SimpleTextMediator()); this.registerProxy(new MyProxy()); } public void setupReceivers(EditText editText1, EditText editText2) { ((TextMediator) this.retrieveMediator(TextMediator.NAME)).setEditText(editText1); ((SimpleTextMediator) this.retrieveMediator(SimpleTextMediator.NAME)).setEditText(editText2); } }
代理数据(共享数据)类:
package com.iteye.weimingtom.pmvc.test; import org.puremvc.java.interfaces.IProxy; import org.puremvc.java.patterns.proxy.Proxy; public class MyProxy extends Proxy implements IProxy { public static final String NAME = "MyProxy"; public MyProxy() { super(NAME, null); } public int clickNum = 0; public int getClickNum() { return clickNum; } public void setClickNum(int clickNum) { this.clickNum = clickNum; } }
消息类:
package com.iteye.weimingtom.pmvc.test; import org.puremvc.java.interfaces.ICommand; import org.puremvc.java.interfaces.INotification; import org.puremvc.java.patterns.command.SimpleCommand; public class SetTextCommand extends SimpleCommand implements ICommand { public static final String NAME = "SET_TEXT_COMMAND"; @Override public void execute(INotification n) { MyProxy proxy = (MyProxy)this.facade.retrieveProxy(MyProxy.NAME); proxy.setClickNum(proxy.getClickNum() + 1); } }
中介类(有两个):
package com.iteye.weimingtom.pmvc.test; import org.puremvc.java.interfaces.IMediator; import org.puremvc.java.interfaces.INotification; import org.puremvc.java.patterns.mediator.Mediator; import android.widget.EditText; public class TextMediator extends Mediator implements IMediator { public final static String NAME = "TextMediator"; private EditText editText; public TextMediator() { super(NAME, null); } public void setEditText(EditText editText) { this.editText = editText; } @Override public String[] listNotificationInterests() { return new String[]{ SetTextCommand.NAME }; } @Override public void handleNotification(INotification n) { if (SetTextCommand.NAME.equals(n.getName())) { if (this.editText != null) { this.editText.setText( "name:" + n.getName() + "\n" + "body:" + n.getBody() + "\n" + "proxy data: clickNum = " + ((MyProxy)this.facade.retrieveProxy(MyProxy.NAME)).getClickNum()); } } } }
package com.iteye.weimingtom.pmvc.test; import org.puremvc.java.interfaces.IMediator; import org.puremvc.java.interfaces.INotification; import org.puremvc.java.patterns.mediator.Mediator; import android.widget.EditText; public class SimpleTextMediator extends Mediator implements IMediator { public final static String NAME = "SimpleTextMediator"; private EditText editText; public SimpleTextMediator() { super(NAME, null); } public void setEditText(EditText editText) { this.editText = editText; } @Override public String[] listNotificationInterests() { return new String[]{ SetTextCommand.NAME }; } @Override public void handleNotification(INotification n) { if (SetTextCommand.NAME.equals(n.getName())) { if (this.editText != null) { this.editText.setText( "clickNum = " + ((MyProxy)this.facade.retrieveProxy(MyProxy.NAME)).getClickNum()); } } } }
对接到界面后:
package com.iteye.weimingtom.pmvc.test; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; public class PureMVCTestActivity extends Activity { private MyFacade facade = new MyFacade(); /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button1 = (Button) this.findViewById(R.id.button1); EditText editText1 = (EditText) this.findViewById(R.id.editText1); EditText editText2 = (EditText) this.findViewById(R.id.editText2); facade.setupReceivers(editText1, editText2); button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { facade.sendNotification(SetTextCommand.NAME, "button1, onClick"); } }); } }
最令我不解的是,如果直接把TextView引用传给registerMediator的TextMediator和SimpleTextMediator对象(作为它们的构造函数的参数),那么响应SetTextCommand的中介类所持有的TextView引用可能不是界面上的TextView引用,因为:
1. 在调试模式下,registerMediator传入的对象引用等于retrieveMediator得到的对象引用。
2. 在直接运行时,registerMediator传入的对象引用不等于retrieveMediator得到的对象引用。
所以,我用这种方式传递EditText引用。
public MyFacade() { this.registerCommand(SetTextCommand.NAME, new SetTextCommand()); this.registerMediator(new TextMediator()); this.registerMediator(new SimpleTextMediator()); this.registerProxy(new MyProxy()); } public void setupReceivers(EditText editText1, EditText editText2) { ((TextMediator) this.retrieveMediator(TextMediator.NAME)).setEditText(editText1); ((SimpleTextMediator) this.retrieveMediator(SimpleTextMediator.NAME)).setEditText(editText2); }
而非在注册时传入:
//这样写可能有问题 public MyFacade(EditText editText1, EditText editText2) { this.registerCommand(SetTextCommand.NAME, new SetTextCommand()); this.registerMediator(new TextMediator(editText1)); this.registerMediator(new SimpleTextMediator(editText2)); this.registerProxy(new MyProxy()); }
发表评论
-
移植js弹幕游戏到libgdx
2012-08-20 10:45 1184原来的游戏是用js实现的: http://www.kikya ... -
突然觉得不能太依赖模拟器加速
2012-08-19 08:02 904以前就怀疑过Android模拟器的加速,不过jkanji接二连 ... -
Markdown语法学习笔记
2012-08-18 20:47 1912一、文本效果: # h1标题 # ,或#h1标题,或h ... -
通过BreakIterator调用Android的icu4c执行中日文的粗略“分词”
2012-08-15 19:17 3380发现Android自带的icu4c可以直接使用,不需要 ... -
再次脱线的Tomoe酱
2012-08-15 09:42 1014之前移植了libspark的Tomoe(原版是用AS2 ... -
OpenGL ES与libgdx学习笔记一:二维坐标系方向变换
2012-08-02 13:16 3504二维坐标系变换为原点在左上角(测试用) * GLES ... -
尝试把Danmaku的SurfaceView移植版移植到libgdx
2012-07-11 17:56 1199测试结果是可行的,帧率可以很大,竟然可以在间隔高于60fps ... -
jkanji 3.x开发展望
2012-06-23 06:35 775首先,我最希望能改善一下用户界面。 其次,是我最想说的(如果 ... -
制作STG游戏的初步构思
2012-06-20 18:13 1368计划第二个游戏是做STG题材的游戏,内容未定(我首先想到的是叉 ... -
Android Platform 3.0 SDK和Eclipse ADT安装记录六
2012-06-19 06:32 1315一、弹幕射击游戏相关项目和网址 1. Danm ... -
ReversiWins预览版截图
2012-06-06 09:44 914今天完成ReversiWins预览版的全部工作了。接下来是添加 ... -
SQLite的全文搜索与符号化问题
2012-06-01 08:35 286920130213更正: 下面的'"明 日 *& ... -
用git下载Android自带app的源代码
2012-05-29 11:19 8361(1) 创建工作目录,创建并切换本地的master分 ... -
关于日语简易词典的svn仓库的一点说明
2012-05-24 15:15 959日语简易词典(jkanji)是我写的一个Android平台的小 ... -
脱线的tomoe手写输入
2012-05-24 12:09 996最近想把日语简易词典的手写功能完善一下,发现一些问题: 1. ... -
Android Platform 3.0 SDK和Eclipse ADT安装记录五
2012-05-11 21:32 1381目录: 一、在Aptana 3 ... -
SQLite学习笔记
2012-05-07 21:05 7476SQLite学习笔记 (未完成,待修改) ... -
KAS代码阅读
2012-05-03 17:36 1024(未完成,待修改) KAS 0.4.3 [201 ... -
ZipFile.getInputStream()的read方法和AudioTrack中的write方法
2012-04-28 11:06 1826最近发现Java的InputStream是一个很诡异的抽象类, ... -
cocos2d-x for Android安装和学习笔记(请用adt-bundle21.1或以上导入)
2012-04-11 18:10 11878(20121108)注意:这篇文章用cdt编译ndk工程的 ...
相关推荐
Android中怎么使用PureMVC框架
这份文档可能涵盖了如何在实际项目中有效使用PureMVC,包括如何定义和使用模型、视图和控制器组件,以及如何利用PureMVC的其他关键特性,如命令模式、通知系统和多层架构等。 PureMVC 的主要特点包括: 1. **多层...
若是想使用,可以直接查看网上的pureMVC 文档,我并未对任何一个函数改名或者更换参数位置。 注意,这个PureMVC中的 class(ClassName, BaseName) 函数并不提供,因为此框架本意就是为了用于cocos2d-x-lua中。
标题中的“可以运行的PureMVC的登陆实例”是指一个基于PureMVC框架的登录功能实现,这个实例已经经过验证可以在FlexBuilder3环境下正常运行。PureMVC是一种经典的多层应用架构模式,它为ActionScript、JavaScript、...
在Unity中使用PureMVC,可以帮助开发者遵循良好的编程实践,提高代码的可读性和可维护性。同时,由于PureMVC框架的轻量级特性,对性能的影响较小,适合各种规模的游戏项目。通过理解并熟练运用PureMVC的各个组成部分...
在这个名为"MyFirstPureMvc"的压缩包中,你将找到一个使用PureMvc开发的Adobe AIR项目的完整实例,这将帮助初学者理解如何在实际项目中应用PureMvc。 首先,让我们深入了解一下PureMvc的MVC架构: 1. **模型...
在Qt环境中,PureMVC提供了对C++语言的支持,使得开发者可以利用其强大的功能和面向对象的特性,同时利用PureMVC的组织结构。这个版本的PureMVC允许开发者更专注于业务逻辑,而不是关注如何把各个组件绑定在一起。 ...
本压缩包"PureMVC.rar"提供了PureMVC在C#平台上的实现,包括单线程版和多线程版,适用于Unity开发或其他C#项目。 首先,我们来深入理解PureMVC的核心概念和架构: 1. **模型(Model)**:模型层负责应用程序的数据...
在"puremvc-csharp-standard-framework-master"这个压缩包中,你将找到PureMVC C#标准版的源代码,包括实现MVC模式的各种接口和类,以及示例应用,这些都是理解和使用PureMVC框架的关键资源。通过深入研究这些文件,...
标题中的“PureMVC中文教程”表明这是一份关于PureMVC框架的中文学习资料,主要面向想要理解和掌握这一框架的开发者。PureMVC是一个开源的、轻量级的、跨平台的MVC(Model-View-Controller)设计模式框架,它提供了...
- 示例项目:可能包含一个简单的Unity项目,演示了如何在实际项目中使用PureMVC框架。 - 文档:可能有README或其他文档,解释如何在Unity项目中集成和使用PureMVC。 - 测试用例:可能包含测试代码,用于验证PureMVC...
在你提供的压缩包中,"PureMvcDemo"可能是一个包含PureMVC框架示例应用的文件夹,用于帮助开发者理解如何在实际项目中使用PureMVC。 **纯MVC框架的核心概念** 1. **模型(Model)**:模型层负责处理应用程序的数据...
在Cocos Creator中使用PureMVC,主要是为了实现更好的模块化、可维护性和可扩展性。PureMVC遵循模型-视图-控制器(Model-View-Controller)设计模式,通过将业务逻辑、用户界面和数据分离,提高了代码的组织结构和...
**纯MVC(PureMVC)AS3版详解** PureMVC是一款轻量级的框架,主要用于实现Model-View-Controller(MVC)设计模式。它最初由Dan Varga创建,旨在提供一种跨平台的解决方案,使开发人员能够更有效地组织和管理应用...
5. **应用场景与最佳实践**:PureMVC在实际项目中的使用场景,以及如何优化和扩展框架。 6. **Hello World示例**:通常会通过一个简单的“Hello World”程序来演示PureMVC的基本工作流程,展示如何创建并运行一个...
标题 "PureMvc 开发指南" 指向的是一个关于 PureMVC 框架的教程或参考材料,这是一款广泛应用在多个平台上的轻量级、模块化、面向切面编程(AOP)的设计模式框架。PureMVC 提供了一种结构化的解决方案,帮助开发者在...
《PureMVC登录示例详解》 在软件开发中,框架的选择往往对项目的架构和可维护性起到关键作用。PureMVC,一个轻量级、跨平台的MVC(Model-View-Controller)框架,因其简洁的设计和强大的组织能力,受到了许多开发者...
1. 棋盘表示:在PureMVC框架下,棋盘可以被抽象为一个二维数组,每个元素代表一个棋盘格,用以存储棋子的状态(空、黑棋或白棋)。 2. 棋子移动:通过Command实现落子逻辑,包括合法性检查(如是否已满、是否有五子...
通过研究这些示例,你可以了解如何在实际项目中使用PureMVC,包括如何定义Proxy、Command、Mediator以及如何注册和调度它们。 总之,PureMVC框架为Flex开发提供了一种强大的组织结构,帮助开发者更好地管理代码,...
5. **Notification(通知)**:PureMVC使用`Notification`对象作为不同组件间通信的机制。`Notification`包含一个名字和可选的携带数据,可以被任何组件发送,并被任何监听者接收。 6. **MacroCommand(宏命令)**...