標籤:
最近比較忙碌,我也不知道忙的什麼東西,打算寫的部落格寫了一半,還沒寫完,今天先扯一扯項目中遇到的一個問題,一方面防止以後遇到這個問題忘記如何解決,另一方面希望可以提供給遇到同樣問題的朋友一個思路.
下面開始正題,在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() {
-
- @Override
- public 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