小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

關(guān)于ListView與CheckBox的結(jié)合(精華版)

 dddTTLee 2011-05-06
 
 
關(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
 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多