Symbian开发/视图间参数传递
2010-05-31 20:25:00 来源:WEB开发网在使用Series 60多视图架构时我们经常需要在视图间传递数据。多视图架构提供了函数
CAknViewAppUi::ActivateLocalViewL(TUid aViewId, TUid aCustomMessageId, const TDesC8& aCustomMessage)
用于在激活某个视图时传入相应的参数。我们可以通过实现视图类的
DoActivateL(const TVwsViewId& aPrevViewId,TUid aCustomMessageId, const TDesC8& aCustomMessage)
来进行参数的处理。
通过观察上面这两个函数发现我们可以利用aCustomMessageId和aCustomMessage来进行直接进行整数型和8位描述符的传递。但如果我们要在视图间传递的参数有很多,这时怎么办?我们可能会想到把多个参数按一定顺序格式化到aCustomMessage中,然后在接收方进行解析。这种方法会产生一个问题:当参数增加或减少时对参数组织和解析都会增加负担。其时Symbian提供了TPckgBuf这个类来进行打包工作,通过它我们可以把一个简单对象(通常是T类)包装到8位描述符的缓冲区中。下面的代码演示了如何利用TPckgBuf在视图间传递简单对象:
//Parameter class class TViewPara { public: TInt32 iId; TBuf<32> iCode; TBuf<8> iStatus; TTime iDate; };
传递参数:
_LIT(KCode, "1021568"); _LIT(KStatus, "N"); TViewPara info; info.iId =
300125; info.iCode.Copy(KCode); info.iStatus.Copy(KStatus);
info.iDate.HomeTime(); TPckgBuf
解析参数:
void CBrowserView::DoActivateL(const TVwsViewId& /*aPrevViewId*/, TUid
aCustomMessageId, const TDesC8& aCustomMessage) {
if(aCustomMessage.Length()) { TViewPara info; TPckgBuf
备注:
为了示例简单明了并没有通过aCustomMessageId进行防御性编码。
上面的代码在基于Series60 3rd的设备上进行了测试,TViewPara中的成员直接使用中文也是正常的。
- ››Symbian S60 SocketConnection参数
- ››开发学院教你用SQL 语句最快速清空MySQL 数据表的...
- ››Symbian乏力:2010年诺基亚悲情大事记
- ››Symbian三大升级开启2011年新战略
- ››Symbian/Android/iOS/WM安装包对比
- ››Symbian一个活动对象的测试例子
- ››Symbian ListBox控件
- ››Symbian下自动切换SDK的批处理代码
- ››Symbian 3 版的 Swype 输入法正式上架
- ››Symbian中的设计模式
- ››Symbian S60平台JAVA开发环境搭建步骤
- ››Symbian自定义控件—如何实现跑马灯效果
更多精彩
赞助商链接