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

          主站蜘蛛池模板: 扶绥县| 买车| 松阳县| 京山县| 韶山市| 崇礼县| 昭觉县| 乳山市| 长白| 和平区| 土默特右旗| 建德市| 汝城县| 衡东县| 胶州市| 乐平市| 江都市| 壶关县| 屯门区| 万山特区| 海丰县| 万载县| 元氏县| 尼玛县| 临湘市| 沽源县| 新龙县| 公主岭市| 昌吉市| 漳浦县| 松潘县| 扎兰屯市| 安陆市| 汉中市| 阜平县| 新民市| 丽水市| 含山县| 来安县| 建宁县| 桐城市|