MMI_fixed_list_menu三种

本文详细解析了MMI框架下三种列表控件显示方式:固定菜单、动态菜单与异步动态菜单,分别适用于不同场景与需求,通过实际案例解释其应用场景与优劣。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

有一阵子我被list_menu给弄晕了。所有需要显示菜单列表的地方,传入的实参都是MMI_fixed_list_menu,但偏偏又有gui_show_fixed_list_menu、gui_show_dynamic_list_menu、gui_show_asyncdynamic_list_menu这三个函数。


从函数名可以看出,gui_show_fixed_list_menu显示的是固定的菜单,所谓fixed;gui_show_dynamic_list_menu显示的是动态菜单;而gui_show_asyncdynamic_list_menu则是又异步又动态(asynchronous + dynamic)。

付贵的教程《MMI实例培训教程》第十五章详细的介绍了列表控件的使用,主要流程是:
1. 设置列表控件的大小和类型
2. 设置列表项的高度和宽度
3. 设置各个列表项的文字和图标
4. 设置各个接口函数

最后,用gui_show_fixed_list_menu将它显示出来。虽然步骤有点多,一步步坐下来倒也不容易出错。

需要特别强调的是第3步,如果列表项特别多,那么这个操作就会非常费时。

以电话簿为例,联系人记录可能有千条以上,如果等一千条记录项都设置好了再进入,用户需要等待很长的时间。聪明的做法是,我先把数据准备好,显示list时再一条条的问我要。因为一屏最多只能显示十来个联系人,所以可以做到很快进入。gui_show_dynamic_list_menu干的就是这个活,当然,在显示之前,需要用init_dynamic_item_buffer设置好相关的参数。

如果另一个模块同样有上千条记录,但它比电话簿更麻烦些,因为它取记录的操作比电话簿要慢很多。OK,我说的是短信模块。

记录多,所以只能用dynamic list;取记录慢,就不能等所有记录都准备好再响应用户操作。可行的办法是,先读取少量的几条记录,进了新屏幕再说。这就是gui_show_asyncdynamic_list_menu显身手的地方。当然,它有缺点,如果用户要看还没有加载进来的短信,它要重新去取记录。显示前同样需要用init_asyncdynamic_item_buffer设置相关的参数。

gui_show_fixed_list_menu是静态的,gui_show_dynamic_list_menu和gui_show_asyncdynamic_list_menu是动态的;gui_show_dynamic_list_menu会把记录一次取得到位,gui_show_asyncdynamic_list_menu则一次只读很少的几条。

用户进入电话簿后一半是查看联系人,会不停的上下翻动,由于记录都读取进来了,所以可以做到很快响应。短信则不然,用户一半只看最近的几条,极少会翻看很久以前的,即使发生,显示一个请稍后,用户也比较能接受。

最后总结一下:如果项很少,直接用gui_show_fixed_list_menu;如果项很多,就只能选用gui_show_dynamic_list_menu或gui_show_asyncdynamic_list_menu;如果取的记录慢且用户很少随机翻动,用gui_show_asyncdynamic_list_menu,否则用gui_show_dynamic_list_menu。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值