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

转载 2007年09月29日 11:23:00

下面是我从Nokia公司论坛上找到的关于视图间传递比较多的参数时的解决方法的文章,介绍的不错,贴在这里,方便需要之人使用。

文章地址:http://wiki.forum.nokia.com/index.php/%E5%A6%82%E4%BD%95%E5%9C%A8%E6%BF%80%E6%B4%BB%E6%9F%90%E4%B8%AAView%E6%97%B6%E6%8A%8A%E7%AE%80%E5%8D%95%E5%AF%B9%E8%B1%A1%28T%E7%B1%BB%29%E5%81%9A%E4%B8%BA%E5%8F%82%E6%95%B0%E8%BF%9B%E8%A1%8C%E4%BC%A0%E9%80%92

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

在使用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中的成员直接使用中文也是正常的。 

相关文章推荐

CComPtr对象作为参数进行 1.值传递 2.引用传递 3.做为返回值的注意事项

1.导致内存泄露的一种调用方式: 下面方法是错误的: IA *pA=NULL; p->QueryInterfaces(...,&pA);//从某个已有接口查询获取IA CComPtr spA(...

对Bean进行操作以用于把入参对象解析成Map参数传递到Mybatis的工具类

工具类如下: package com.cdkj.frame.core.utils; import java.beans.PropertyDescriptor; import java.lang.r...

指针做为参数传递

如果一个函数的参数是一个指针,不能用此指针去动态申请内存, #include #include using namespace std; void GetMemory(char *p,in...

jquery autocomplete自动补全 jsp调用后台Java程序,如何把el表达式做为参数传递_读书人

jquery autocomplete自动补全 简单用法: ? 1 2 3 4 5 6 7 8 9 $(function(){ var data = "the People's...

UNIX网络编程练习-传递结构体做为参数

以数据结构做为传送的对象.

json数据与JAVA数据的转换 jsonJavaBean.netApache 自己编写了一个工具类,处理页面提交json格式数据到后台,再进行处理成JAVA对象数据 1、DTO:Data T

json数据与JAVA数据的转换 jsonJavaBean.netApache  自己编写了一个工具类,处理页面提交json格式数据到后台,再进行处理成JAVA对象数据 1、DTO:...

STM32 systick做为系统时间使用(非简单延时)

基本能搜到的systick 都是作为延时使用的,因为设计需求我更多实用的是系统时间判断。 假如我有个LED 需要每10s 闪一下,并且单片机还需要做其他的工作,用延时工作效率太低了,开个定时器又太浪...

Android Parceable的简单用法,如何传递List<T>和对象,中间写入数组

我发现大部分人在写序列化的时候,都是用的Serializable。很少使用Parceable,其实他们大多数都知道Parcelable这个东西,也知道在不本地化数据的时候,速度比Serializabl...

Javascript闭包--循环中可以将每个对象当参数进行传递

“函数是不是闭包” 这种问题本身是不对的。虽然在网络上常见这种提法,但是其实是因为对 Javascript 实现机制不清楚胡乱猜测导致的误解。 首先,一个函数不管是不是匿名函数,和闭包之间根...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何在激活某个View时把简单对象(T类)做为参数进行传递
举报原因:
原因补充:

(最多只允许输入30个字)