Look into it ~

          present
          隨筆 - 32, 文章 - 0, 評論 - 3, 引用 - 0
          數據加載中……

          J2me的List總結

          List控件是使用頻率非常高的顯示控件之一了。但是最近發(fā)現它的一點不足。
          那就是getSelectedIndex()函數,一般情況下它都能正常工作。唯有在List處于復選模式(MULTIPLE)時,使用該函數無法獲得當前高亮條選中索引,而總是返回-1。

          參考List控件的源代碼,可以發(fā)現,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)下,我們是無法獲取當前高亮條所在項的索引值的。
          當然,你可以自己數數。

          也許你覺得這個問題不算嚴重,也許吧。但我覺得對于程序員來說,最嚴重的問題就是理解發(fā)生偏差。
          比如我,在發(fā)現這個問題之前。憑借多年的編程經驗,我很確定很確定的認為,這個getSelectedIndex()永遠能夠獲得當前光標所指項的索引值。
          ……當錯誤來臨時,我百思不得其解。最后,花了好些時間去調試才發(fā)現,那個值總等于-1。操!花了太多時間去猜測原本正確的代碼。
          我只想告訴大家,真正耗費時間最多,讓人最惡心的錯誤,往往就是這樣的問題。再操!

          那么有什么簡單的解決辦法么?
          我可以很負責任的告訴你,自己寫一個多選的List控件吧,記住不要讓getSelectedIndex()總返回-1。即使是多選,有時候也是需要這個值的。

          也許你想繼承List,然后重載getSelectedIndex()方法。但你無法重載List的keyPressed方法(其實List等Screen控件都用Canvas寫的)。
          ……或許還能想到別的什么好辦法。不過我的選擇是自己寫一個List控件代替它(如果對它感興趣,請回復,改天我在弄出來吧)。

          至于List的其它功能,就沒什么重復的必要的,看看文檔吧。

          posted on 2008-08-15 15:20 LukeW 閱讀(299) 評論(0)  編輯  收藏 所屬分類: Tips, Tricks, Hints & Code

          主站蜘蛛池模板: 屯留县| 庆云县| 夏河县| 鲜城| 基隆市| 梨树县| 新宁县| 邛崃市| 增城市| 建水县| 澎湖县| 商都县| 襄汾县| 顺义区| 五大连池市| 壶关县| 海原县| 昭平县| 平度市| 贡山| 长顺县| 界首市| 特克斯县| 金川县| 周宁县| 都匀市| 武安市| 元阳县| 紫云| 德惠市| 文登市| 肃宁县| 广德县| 封开县| 比如县| 静宁县| 库伦旗| 滦南县| 繁峙县| 莎车县| 木里|