j2me经验总结之List


作者:hunhun1981
出自:http://blog.csdn.net/hunhun1981/

List控件是使用频率非常高的显示控件之一了。但是最近发现它的一点不足。
那就是getSelectedIndex()函数,一般情况下它都能正常工作。唯有在List处于复选模式(MULTIPLE)时,使用该函数无法获得当前高亮条选中索引,而总是返回-1。

参考List控件的源代码,可以发现,List类实现了Choice接口,并且包含一个ChoiceGroup成员。它才是实现List大部分功能的大功臣。
List类的getSelectedIndex()方法,实际上就是ChoiceGroup的getSelectedIndex()方法。大家可以参考Doc中关于ChoiceGroup的getSelectedIndex()方法的如下部分。
“For ChoiceGroup objects of type MULTIPLE, this always returns -1 because no single value can in general represent the state of such a ChoiceGroup.”

就是说,List在多选模式(MULTIPLE)下,我们是无法获取当前高亮条所在项的索引值的。
当然,你可以自己数数。

也许你觉得这个问题不算严重,也许吧。但我觉得对于程序员来说,最严重的问题就是理解发生偏差。
比如我,在发现这个问题之前。凭借多年的编程经验,我很确定很确定的认为,这个getSelectedIndex()永远能够获得当前光标所指项的索引值。
……当错误来临时,我百思不得其解。最后,花了好些时间去调试才发现,那个值总等于-1。操!花了太多时间去猜测原本正确的代码。
我只想告诉大家,真正耗费时间最多,让人最恶心的错误,往往就是这样的问题。再操!

那么有什么简单的解决办法么?
我可以很负责任的告诉你,自己写一个多选的List控件吧,记住不要让getSelectedIndex()总返回-1。即使是多选,有时候也是需要这个值的。

也许你想继承List,然后重载getSelectedIndex()方法。但你无法重载List的keyPressed方法(其实List等Screen控件都用Canvas写的)。
……或许还能想到别的什么好办法。不过我的选择是自己写一个List控件代替它(如果对它感兴趣,请回复,改天我在弄出来吧)。

至于List的其它功能,就没什么重复的必要的,看看文档吧。 

更多信息,请关注hunhun1981的专栏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值