Look into it ~

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

          J2me的List總結

          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的其它功能,就沒什么重復的必要的,看看文檔吧。

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

          主站蜘蛛池模板: 应城市| 濉溪县| 香格里拉县| 庆阳市| 泾源县| 临高县| 桐庐县| 丰顺县| 博湖县| 娄底市| 天水市| 东台市| 邵东县| 于都县| 封丘县| 白玉县| 资中县| 阳东县| 齐河县| 黄山市| 宜昌市| 山东省| 牙克石市| 萝北县| 永春县| 靖安县| 皋兰县| 汉寿县| 桦川县| 临沧市| 高淳县| 澄迈县| 呼伦贝尔市| 嵊州市| 连州市| 吐鲁番市| 木兰县| 郸城县| 济源市| 夹江县| 双流县|