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