如何在激活某个View时把简单对象(T类)做为参数进行传递
2009-04-07 00:23
477 查看
在使用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 )来进行参数的处理。
通过观察上面这两个函数发现我们可以利用aCustomMessageId和aCustomMessage来进行直接进行整数型和8位描述符的传递,但如果我们要在view间传递的参数有很多,这时怎么办?我们可能会想到把多个参数按一定顺序格式化到aCustomMessage中,然后在接收方进行解析。这种方法会产生一个问题:当参数增加或减少时对参数组织和解析都会增加负担。其时Symbian提供了TPckgBuf这个类来进行打包工作,通过它我们可以把一个简单对象(通常是T类)包装到8位描述符的buffer中。下面的代码演示了如何利用TPckgBuf在view间传递简单对象:
//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(); //iInfo是TViewPara类型的数据成员
}
//Other operation
……………………………
}
备注:
为了示例简单明了并没有通过aCustomMessageId进行防御性编码。
上面的代码在基于Series60 3rd的设备上进行了测试,TViewPara中的成员直接使用中文也是正常的。
通过观察上面这两个函数发现我们可以利用aCustomMessageId和aCustomMessage来进行直接进行整数型和8位描述符的传递,但如果我们要在view间传递的参数有很多,这时怎么办?我们可能会想到把多个参数按一定顺序格式化到aCustomMessage中,然后在接收方进行解析。这种方法会产生一个问题:当参数增加或减少时对参数组织和解析都会增加负担。其时Symbian提供了TPckgBuf这个类来进行打包工作,通过它我们可以把一个简单对象(通常是T类)包装到8位描述符的buffer中。下面的代码演示了如何利用TPckgBuf在view间传递简单对象:
//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(); //iInfo是TViewPara类型的数据成员
}
//Other operation
……………………………
}
备注:
为了示例简单明了并没有通过aCustomMessageId进行防御性编码。
上面的代码在基于Series60 3rd的设备上进行了测试,TViewPara中的成员直接使用中文也是正常的。
相关文章推荐
- 如何在激活某个View时把简单对象(T类)做为参数进行传递
- 如何在激活某个View时把简单对象(T类)做为参数进行传递
- CComPtr对象作为参数进行 1.值传递 2.引用传递 3.做为返回值的注意事项
- 纯html页面如何提交、传递参数、以及对身份进行验证
- jQuery调用WCF服务时如何传递对象参数
- ReportView如何使用构造SQL语句带参数的存储过程创建报表以及为rdlc传递参数
- Jersey使用总结一(jersey初步使用和简单post请求几种参数传递,String方式,不含对象操作)
- spring mvc 如何从前台表单传递集合参数并绑定集合对象。 [问题点数:40分,结帖人NewMoons]
- 对象作为方法的参数进行连续传递二
- jsp页面传递参数是如何与javabean进行关联的
- 安卓开发-Application全局变量如何在activity和view中传递对象
- Spring MVC中如何传递对象参数
- 如何在两个COM对象之间进行参数传递
- (转载)你好,C++(26)如何与函数内部进行数据交换?5.1.3 函数参数的传递
- 在 Angularjs 中 ui-sref 和 $state.go 如何传递单个多个参数和将对象作为参数
- 使用uploadify插件进行多文件上传时如何传递表单参数
- .Net中引用型对象作为参数进行传递
- 对象作为方法的参数进行连续传递三
- c#中如何进行页面的参数传递
- 你好,C++(26)如何与函数内部进行数据交换?5.1.3 函数参数的传递