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 閱讀(299) 評論(0)  編輯  收藏 所屬分類: Tips, Tricks, Hints & Code

          主站蜘蛛池模板: 静安区| 营山县| 江北区| 林芝县| 宁德市| 永德县| 锡林郭勒盟| 堆龙德庆县| 盱眙县| 密山市| 农安县| 乌兰浩特市| 怀远县| 读书| 仁布县| 巫山县| 冕宁县| 山东省| 牙克石市| 沙河市| 二手房| 韶山市| 闸北区| 罗甸县| 老河口市| 武鸣县| 承德市| 林周县| 瓦房店市| 湟中县| 句容市| 那坡县| 塔城市| 常州市| 台南市| 泊头市| 健康| 广西| 全南县| 岱山县| 虎林市|