關於android的ListView的getCheckItemIds無法準確得到被選checkbox的bug

最近在項目中發現當android的listview是多選模式加載數據的,那麼listview的getCheckItemIds()方法所得到數據是不精確的,當你選中其中一項item,然後又取消的時候getCheckItemIds()還是能得到你剛剛取消的listitem的id值,原因在於google在Listview的源碼中出現BUG,大家可以翻閱android 的Listview的getCheckItemIds()這個方法的源碼就會發現這個問題,我的解決辦法是重寫一個adapter我現在是用的內部類實現代碼如下:

在這個adapter中我的ListItem佈局文件是用的系統的android.R.layout.simple_list_item_multiple_choice文件,這個文件可以在android模擬器下面的platforms下面的目錄中找到,如果有什麼不明白大家可以去看下文件中是怎麼定義的。

這裏值得注意的是當listitem佈局裏面包含了checkbox的時候listview的onItemClickListener()事件將被checkbox的onClickListener()事件覆蓋,這是由於checkbox的onClick事件優先級要高於ListView的onItemClick事件,解決的辦法可以把checkbox的focus和和clickable和touchClickable等屬性設置爲false即可,我現在這裏之所以設置爲true是因爲我用的系統的android.R.layout.simple_list_item_multiple_choice佈局文件這個文件的clickabel屬性默認是false,也不知道是什麼原因,當觸發listview的onItemClick事件的時候點擊的那個listitem的下標位置會變動,比如說當前列表中有2條數據,當單擊第一條的時候第2條會變成第一條,第一條會變成第二條數據,所以我只有利用前面說的BUG,讓listView的ononItemClick事件失效,利用checkTextView的onClick事件來實現當用戶單擊ListItem時改變checkbox的狀態,只是這種實現會導致單擊listitem被單擊時失去原有的效果。

至於listitem數據爲什麼會出現位置混亂的原因還正在研究中,如果高手知道原因不妨共享下解決方法與原因,呵呵。

總之感覺android平臺的bug還是蠻多的啊,google的開發質量還有待提高啊。

發佈了34 篇原創文章 · 獲贊 47 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章