| 關(guān)于通過ListView將數(shù)據(jù)綁定到復(fù)選框的問題的總結(jié) 問題來源: 1 選中第一頁的第2,3個(gè)復(fù)選框,當(dāng)翻到第二頁的時(shí)候其相同位置也被選中 解決思路:絕不能依靠復(fù)選框的被選中來刪除黑名單號(hào)碼(原因見上面分析),而依靠哪個(gè)數(shù)據(jù)被選中來刪除黑名單.那么怎么知道這個(gè)數(shù)據(jù) 是否被選中呢?就是通過 CheckBox的被選狀態(tài)來提示用戶的。所以說CheckBox只是起到一個(gè)顯示作用!! 解決辦法:自定義SimpleAdapter類,重寫getView()方法。而且借用了外部的全局的balckNumberIsCheckedMap保存了每個(gè)電話號(hào)碼的狀態(tài),初始時(shí)均未被選中。 重寫getView()方法的目的: (1)實(shí)現(xiàn)數(shù)據(jù)的綁定checkBox.setText(blacknumber);//這里就是綁定的實(shí)質(zhì)。把這個(gè)電話號(hào)碼綁定到了ListView的這個(gè)checkbox上 (2)為CheckBox賦予初始狀態(tài)(初始狀態(tài)均為未被選中) boolean isChecked=balckNumberIsCheckedMap.get(id); checkBox.setChecked(isChecked); 2 通過實(shí)現(xiàn)對(duì)于條目點(diǎn)擊事件的監(jiān)聽,我們?cè)邳c(diǎn)擊條目的時(shí)候可知道是背后的那條數(shù)據(jù)被點(diǎn)擊 即HashMap<String,Object> itemHashMap=(HashMap<String, Object>) lv.getItemAtPosition(position);于是就可以修改此號(hào)碼在balckNumberIsCheckedMap中的狀態(tài) 從而用此狀態(tài)來決定復(fù)選框CheckBox的狀態(tài),這樣的話點(diǎn)擊幾個(gè)條目去實(shí)現(xiàn)刪除的時(shí)候遍歷balckNumberIsCheckedMap查看哪些號(hào)碼被選中,把選中的刪除即可。 這樣帶來了第二個(gè)問題:點(diǎn)擊條目的時(shí)候,其實(shí)沒有真正地點(diǎn)擊到條目,而是點(diǎn)擊了復(fù)選框CheckBox,因?yàn)閺?fù)選框的優(yōu)先級(jí)很高。 解決辦法:在布局文件中使復(fù)選框不可以被點(diǎn)擊,不可以被觸摸,不可以獲得焦點(diǎn)!!!于是在點(diǎn)擊條目的時(shí)候就真的是在點(diǎn)擊條目了!!!!!!!! 于是可以這樣處理?xiàng)l目點(diǎn)擊事件: (1) 在點(diǎn)擊的時(shí)候切換復(fù)選框狀態(tài)checkBox.toggle();每點(diǎn)擊條目都會(huì)切換此狀態(tài);然后得到復(fù)選框現(xiàn)在的狀態(tài)即boolean itemIsCheck=checkBox.isChecked(); (2) 得到當(dāng)前被點(diǎn)擊電話號(hào)碼即HashMap<String,Object> itemHashMap=(HashMap<String, Object>) lv.getItemAtPosition(position); (3) 得到號(hào)碼的ID即int blackNumberId=(Integer) itemHashMap.get("id"); (4) 然后修改此號(hào)碼在balckNumberIsCheckedMap中的狀態(tài)即balckNumberIsCheckedMap.put(blackNumberId, itemIsCheck); 這樣就實(shí)現(xiàn)了形式與內(nèi)容的統(tǒng)一,復(fù)選框的狀態(tài)發(fā)生了變化,而且正確體現(xiàn)了實(shí)際情況。 核心代碼如下: checkBox.toggle(); boolean itemIsCheck=checkBox.isChecked();//得到checkBox目前的狀態(tài) HashMap<String,Object> itemHashMap=(HashMap<String, Object>) lv.getItemAtPosition(position);//得到ListView被點(diǎn)擊條目所綁定的HashMap int blackNumberId=(Integer) itemHashMap.get("id"); balckNumberIsCheckedMap.put(blackNumberId, itemIsCheck);   當(dāng)我們執(zhí)行刪除的時(shí)候:其實(shí)就是去HashMap<Integer, Boolean> balckNumberIsCheckedMap看哪些數(shù)據(jù)被選中了,若被選中就刪除它們。 本文來自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/lfdfhl/archive/2011/02/09/6175269.aspx | 
|  |