標籤:listview checkbox android
最近比較忙碌,我也不知道忙的什麼東西,打算寫的部落格寫了一半,還沒寫完,今天先扯一扯項目中遇到的一個問題,一方面防止以後遇到這個問題忘記如何解決,另一方面希望可以提供給遇到同樣問題的朋友一個思路.
下面開始正題,在listview的item中使用checkbox,當你按照普通的listview的用法使用時,你會遇到下面這樣的問題:
1.checkbox可以點擊,但是listview的item無法點擊
2.無法獲得checkbox被點擊的是哪一行
第一個問題涉及到事件分發,下一篇再扯(我會按照我的理解,通俗易懂的來描述),第二個問題我的理解就是getview無法重繪的原因,這裡拿不到position的值,為了能解決我的問題,我需要換一種思路,也就是我今天介紹的方法:屏蔽checkbox的選擇事件,也就是說checkbox不能響應選中事件,當使用者點擊listview的item時,製造假象,用代碼控制選中checkbox
恩,差不多就這些了,由於代碼直接寫到項目中了,就不寫demo了,直接貼一下主要代碼,僅供參考,如果您有更好的方法可以相互交流
1,設定 checkbox無法響應點擊事件
android:clickable="false" android:focusable="false" android:focusableInTouchMode="false"
2.適配器中聲明一個值用來控制checkbox的選中情況
private static HashMap<Integer,Boolean> isSelected;
public static HashMap<Integer,Boolean> getIsSelected() { return isSelected; } public static void setIsSelected(HashMap<Integer,Boolean> isSelected) { MyDocShowAdapter.isSelected = isSelected; }
isSelected = new HashMap<Integer, Boolean>(); for(int i=0; i<list.size();i++) { getIsSelected().put(i,false); }
3.根據item的點擊情況,給checkbox賦值
mListView.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {ViewHolder holder = (ViewHolder) view.getTag(); holder.mCheckBox.toggle();MyDocShowAdapter.getIsSelected().put(position, holder.mCheckBox.isChecked());}});
今天就到這,有問題請留言,多交流
Android listview中使用checkbox