有这样那个一个简单的程序:
有两个视图,初始化时载入第一个视图。点击菜单中的一项时,进入一个窗体进行数据的处理。处理完成后,转向第二个视图。
期间遇到了很多问题,在网友的帮助下一一解决了。虽然还没什么实质性的功能,但起码一个大体的流程已经搭建起来了。期间我也对symbian有了一个最初级的认识。
这里主要说一下视图之间的切换的问题。
其实这个问题很简单,如果你能找到实现方法的话。
首先来看一下AppUi类中初始化两个视图的代码:
void CControlsAppUi::ConstructL()
{
BaseConstructL();
iView2 = CCompoundControlView::NewL();
AddViewL(iView2); // transfer ownership
iView1 = CSimpleControlView::NewL();
AddViewL(iView1); // transfer ownership
SetDefaultViewL(*iView1);
}
这里进行了视图的初始化工作,并将第一个视图作为默认视图。
下面是其中一个视图的主要方法,包括视图的初始化、激活、命令处理
在这里主要看一下切换视图的代码,我是在命令处理方法中这样写:
void CSimpleControlView::HandleCommandL(TInt aCommand)
{
switch (aCommand)
{
casequeryMuenuItem:
{
//CQueryForm* queryForm = CQueryForm::NewL();
//queryForm->ExecuteLD(R_NUMERICEDITOR_FORM_DIALOG);
AppUi()->ActivateLocalViewL(TUid::Uid(ECompoundControlViewId));
break;
}
default:
{
AppUi()->HandleCommandL(aCommand);
}
}
}
我把无关的信息已经屏蔽掉了,这里起到视图切换的就一句:AppUi()->ActivateLocalViewL(TUid::Uid(ECompoundControlViewId));
意思应该就是激活一个视图。
主要是TUid::Uid(ECompoundControlViewId)的这种写法,和ECompoundControlViewId的值究竟是什么?
经试验确定这个值就是在方法
TUid CSimpleControlView::Id() const
{
return TUid::Uid(ESimpleControlViewId);
}
中的“ESimpleControlViewId”值。
这个值是在资源文件中配置的:
enum TControlsViewNumber
{
ECompoundControlViewId= 3,
ESimpleControlViewId = 4
};
还有,一定要写好视图的DoActivateL和DoDeactivate方法,这是在视图激活和销毁时执行的。
虽然对symbian还是茫茫然的感觉,但起码写出一点东西来了,一点安慰吧。 |