WEB开发网      婵犵數濞€濞佳囧磹婵犳艾鐤炬い鎰堕檮閸嬬喐銇勯弽銊с€掗梻鍕閺岋箑螣娓氼垱笑闂佽姘﹂褔婀佸┑鐘诧工妤犲憡绂嶉崜褏纾奸弶鍫涘妼缁楁岸鏌熷畡鐗堝殗闁诡喒鏅犲畷褰掝敃閵堝棙顔忔繝鐢靛仦閸ㄥ爼骞愰幘顔肩;闁规崘绉ぐ鎺撳亹闁绘垶锕╁Λ鍕⒑閹肩偛濡奸悗娑掓櫇缁顓兼径妯绘櫇闂佹寧绻傞弻濠囨晝閸屾稓鍘甸柣搴㈢⊕閿氶柣蹇ョ稻缁绘繃绻濋崘銊т紝闂佽鍨伴崯鏉戠暦閻旂⒈鏁傞柛鈾€鏅欑槐妯衡攽閻愬樊鍤熷┑顔藉劤铻為柛鏇ㄥ墯閸欏繘鏌嶉崫鍕櫣缂佲偓婢跺绠鹃柟瀛樼箘閿涘秵顨ラ悙顏勭伈闁诡喖缍婂畷鎯邦槻婵℃彃顭烽弻娑㈠Ω閵夈儺鍔夌紓浣稿€哥粔褰掑极閹剧粯鏅搁柨鐕傛嫹 ---闂傚倷鐒︾€笛兠洪埡鍛闁跨噦鎷�
开发学院手机开发Symbian 开发 Symbian开发/视图间参数传递 阅读

Symbian开发/视图间参数传递

 2010-05-31 20:25:00 来源:WEB开发网 闂傚倷绶氬ḿ褍螞閹绢喖绠柨鐕傛嫹闂傚倷绀侀幉锟犲垂閻㈠灚宕查柟鎵閸庡秵銇勯幒鎴濃偓鐢稿磻閹炬枼妲堟繛鍡楃С濞岊亞绱撻崒姘扁枌闁瑰嚖鎷�婵犵數濮幏鍐川椤撴繄鎹曢梻渚€娼уú銈吤洪妸鈺佺劦妞ゆ帊鑳堕埊鏇㈡煏閸モ晛浠х紒杈╁仱閺佹捇鏁撻敓锟�闂傚倷绶氬ḿ褍螞閹绢喖绠柨鐕傛嫹  闂傚倷鑳舵灙缂佺粯顨呴埢宥夊即閵忕姵鐎梺缁樺姇閻忔氨鈧凹鍓熷娲垂椤曞懎鍓伴梺閫炲苯澧紒澶婄秺瀵濡歌閸嬫捇妫冨☉娆忔殘闂佷紮缍€娴滎剟鍩€椤掑倹鏆柛瀣躬瀹曚即寮借閺嗭箓鏌ㄩ悤鍌涘
核心提示:在使用Series 60多视图架构时我们经常需要在视图间传递数据,多视图架构提供了函数CAknViewAppUi::ActivateLocalViewL(TUid aViewId, TUid aCustomMessageId, const TDesC8& aCustomMessage)用于在激活某个视图时传入相应的参数

在使用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 package(info); TBuf8<128> para; //要根据TViewPara所占的内存空间准备足够的缓冲区 para.Copy(package); ui->ActivateLocalViewL(TUid::Uid(EBrowserViewId), TUid::Uid(0), para);

解析参数:

void CBrowserView::DoActivateL(const TVwsViewId& /*aPrevViewId*/, TUid aCustomMessageId, const TDesC8& aCustomMessage) { if(aCustomMessage.Length()) { TViewPara info; TPckgBuf package(info); package.Copy(aCustomMessage); iInfo = package(); //iInfo是TViewPara类型的数据成员 } //…………………………… }

备注:

为了示例简单明了并没有通过aCustomMessageId进行防御性编码。

上面的代码在基于Series60 3rd的设备上进行了测试,TViewPara中的成员直接使用中文也是正常的。

Tags:Symbian 开发 视图

编辑录入:coldstar [复制链接] [打 印]
赞助商链接