void CMyAppView1::HandleCommandL(TInt aCommand)
{
switch (aCommand)
{
case EMyAppCmdSwitchView:
AppUi()->ActivateLocalViewL(KView2Id);
break;
case EAknSoftKeyOk:
{
......
break;
}
case EAknSoftKeyBack:
{
((MEikCommandObserver*)AppUi())->ProcessCommandL(EEikCmdExit);
break;
}
default:
AppUi()->HandleCommandL(aCommand);
break;
}
}
Local View Switching
如果你要切换view,你得提供view的UID
//Now switch the view to view2
iAvkonViewAppUi->ActivateLocalViewL(TUid::Uid(2));
事实上,每个view都有自己的菜单系统,如果你要使用它,应当在AVKON_VIEW资源结构中设置,前面已经讲过了。
而且不管怎么说,如果要使用系统菜单,它的内容在切换之前是一定要更新一次的。
//Switch to a new menu system for the new view
iEikonEnv->AppUiFactory()->MenuBar()->SetMenuTitleResourceId(R_MY_VIEW_ARCH_APP_VIEW2_MENU);
//Now swtich the view to view2
Do you have an acyclic graph shaped navigation structure?
如果你视图程序中的navigation能够as an acyclic gragh,那最好使用dialog体系结构。
Are all the application screens dialog like?
如果你的应用程序想使用对话框,那建议你使用dialog体系结构,注意如果要有一个选择列表,那最好写成包含在dialog中的选择列表。
Does the application have multiple views or modes, which deal with different sorts of data at the top level?
如果是这样,那最好使用传统或view体系结构。
Do external applications need to switch to different views of your application?
如果是采用view体系结构写的程序,那它一定支持多个不同的view,而且是外部程序能访问的。如果你从头开始写一个应用程序,那建议你使用view体系结构,
Can all of the applications views be exited without loosing user data?
使用view体系的程序必须有能力处理因外部程序而引起的views的释放。如果程序不能自动的释放这些view,那就要考虑其他两种体系了,要么使用view体系as a message passing system,要么让app UI在传统体系中管理view。
Do external applications need complex interactions with the data in your app?
如果外部程序和你的程序有大量的数据交互,那你最好选择client/server系统。它将减小view的使用量。大量现有的复杂应用,如短信,web以及通讯录都使用这样的机制,这是个很好的构想,总比要重写他们要好:)
Is there only a single complex main view in the app?
如果是这种情况,那还是使用传统的体系。
web browser
web浏览器可以做为单一的web上网工具,也可以内嵌在其他的文档中。web浏览器可以通过外部程序可以访问的dll来提供一个UI control,但并不给外部提供可用的全屏应用。它必须能够应付外界的访问,譬如说应付在点击mail连接后撰写电子邮件的过程。
主体程序主要是用传统的体系结构,也可以采用view体系来应付访问页面的需求。
CAknAppUi
所有的Avkon应用程序必须从这个类派生。
这个类支持下面几个特定应用函数:
KeySound support
Accessories for CBA and StatusPane
TextResolver-Avkon-specific error reporting from CAknAppUI::HandleError()
Avkon view architectrue integration
Control dumping - Debug feature