如何在激活某个View时把简单对象(T类)做为参数进行传递

<script></script>

在使用Series 60 Multi-View架构时我们经常需要在view间传递数据, Multi-View架构提供了CAknViewAppUi::ActivateLocalViewL(TUid aViewId, TUid aCustomMessageId, const TDesC8& aCustomMessage)函数用于在激活某个view时传入相应的参数。我们可以通过实现view类的DoActivateL( const TVwsViewId& aPrevViewId,TUid aCustomMessageId, const TDesC8& aCustomMessage )来进行参数的处理。

 

通过观察上面这两个函数发现我们可以利用aCustomMessageIdaCustomMessage来进行直接进行整数型和8位描述符的传递,但如果我们要在view间传递的参数有很多,这时怎么办?我们可能会想到把多个参数按一定顺序格式化到aCustomMessage中,然后在接收方进行解析。这种方法会产生一个问题:当参数增加或减少时对参数组织和解析都会增加负担。其时Symbian提供了TPckgBuf这个类来进行打包工作,通过它我们可以把一个简单对象(通常是T类)包装到8位描述符的buffer中。下面的代码演示了如何利用TPckgBufview间传递简单对象:

 

//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< TViewPara > package(info);

TBuf8<128> para;       //要根据TViewPara所占的内存空间准备足够的buffer

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< TViewPara > package( info );

              package.Copy( aCustomMessage );

              iInfo = package();     //iInfoTViewPara类型的数据成员

         }

         //Other operation

         ……………………………

}

 

备注:

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

     上面的代码在基于Series60 3rd的设备上进行了测试,TViewPara中的成员直接使用中文也是正常的。 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值