温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

安卓ListView中CheckBox的使用(支持Item列表项的删除,全选,全不选)

发布时间:2020-07-19 15:31:05 来源:网络 阅读:1294 作者:uxlwsfmf 栏目:移动开发
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <ListView
        android:id="@id/android:list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:cacheColorHint="#00000000"
        android:fadingEdge="none" />
    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="40.0dip"
        android:layout_alignParentBottom="true" >
        <CheckBox
            android:id="@+id/all_check_btn"
            android:layout_width="40.0dip"
            android:layout_height="40.0dip"
            android:layout_alignParentLeft="true"
             />
    </RelativeLayout>
</RelativeLayout>




<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginRight="3.0dip"
    android:layout_weight="1.0"
    android:descendantFocusability="blocksDescendants"
    android:orientation="horizontal" >
    <CheckBox
        android:id="@+id/isCheakBox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true" />
    <!-- 日报图片 -->
    <ImageView
        android:id="@+id/dailyPic"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_marginTop="3.0dip"
        android:layout_toRightOf="@id/isCheakBox"
        android:contentDescription="dailyPic"
        />
    <!-- 附件名称 -->
    <TextView
        android:id="@+id/dailyName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@id/dailyPic"
        android:text="日报名称"
        android:textColor="#000000"
        android:textSize="12.0sp" />
    <ImageButton
        android:id="@+id/deleteAttachment"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:layout_marginRight="20dp"
        android:layout_marginTop="3.0dip"
        android:focusable="false" />
    <!-- 附件名称 -->
</RelativeLayout>
public class ListViewCheckBoxActivity extends ListActivity {
     private static final String TAG = "ListViewCheckBoxActivity"; 
       
        private List<Item> itemList; 
        private DraftDailyAdapter adapter; 
        private Map<Integer, Boolean> isCheckedMap; 
        private CheckBox allCheckBox; 
        @Override 
        protected void onCreate(Bundle savedInstanceState) { 
            super.onCreate(savedInstanceState); 
            setContentView(R.layout.main); 
            allCheckBox = (CheckBox)findViewById(R.id.all_check_btn); 
            itemList = new ArrayList<Item>(); 
            isCheckedMap = new HashMap<Integer, Boolean>(); 
            //初始化数据 
            for(int i=0;i<8;i++){ 
                Item item = new Item(); 
                item.id=i; 
                item.name = "第"+i+"篇日报"; 
                itemList.add(item); 
                isCheckedMap.put(i,false); 
            } 
                
            adapter = new DraftDailyAdapter(this,itemList); 
            setListAdapter(adapter); 
            allCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){  
                @Override  
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {  
                    Set<Integer> set = isCheckedMap.keySet(); 
                    Iterator<Integer> iterator = set.iterator();   
                    if(isChecked){  
                        while(iterator.hasNext()){    
                            Integer keyId = iterator.next();    
                            isCheckedMap.put(keyId,true); 
                        }    
                    }else{  
                        while(iterator.hasNext()){    
                            Integer keyId = iterator.next();   
                            isCheckedMap.put(keyId,false); 
                        }   
                    } 
                    adapter.notifyDataSetChanged(); 
                }  
            });  
        } 
                
        class DraftDailyAdapter extends BaseAdapter { 
        
            public List<Item> list; 
            private Context context; 
            LayoutInflater inflater; 
        
            public DraftDailyAdapter(Context context, List<Item> list) { 
                super(); 
                this.list = list; 
                this.context = context; 
                inflater = LayoutInflater.from(this.context); 
            } 
            @Override 
            public int getCount() { 
                return list == null ? 0 : list.size(); 
            } 
            @Override 
            public Object getItem(int location) { 
                return list.get(location); 
            } 
            @Override 
            public long getItemId(int position) { 
                return position; 
            } 
            @Override   
            public View getView(int position, View convertView, ViewGroup parent) {   
                ViewHolder holder = null;     
                Item item = list.get(position); 
                //Item的位置 
                final int listPosition = position; 
                //这个记录item的id用于操作isCheckedMap来更新CheckBox的状态 
                final int id = item.id; 
                if(convertView == null){ 
                    holder = new ViewHolder(); 
                    convertView = inflater.inflate(R.layout.item, null);   
                    holder.tvName = (TextView)convertView.findViewById(R.id.dailyName);   
                    holder.deleteButton = (ImageButton)convertView.findViewById(R.id.deleteAttachment); 
                    holder.cBox = (CheckBox)convertView.findViewById(R.id.isCheakBox); 
                    convertView.setTag(holder); 
                }else{ 
                    holder = (ViewHolder) convertView.getTag(); 
                } 
                Log.d(TAG, "id="+id); 
                holder.cBox.setChecked(isCheckedMap.get(id)); 
                holder.tvName.setText(item.name);  
                holder.deleteButton.setOnClickListener(new OnClickListener() { 
                    @Override 
                    public void onClick(View paramView) { 
                        //Log.d(TAG, "deletePosition="+listPosition+""); 
                        //删除list中的数据 
                        list.remove(listPosition); 
                        //删除Map中对应选中状态数据 
                        isCheckedMap.remove(id); 
                        //通知列表数据修改 
                        adapter.notifyDataSetChanged(); 
                    } 
                }); 
                holder.cBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){  
                    @Override  
                    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {  
                        if(isChecked){  
                            isCheckedMap.put(id,true); 
                        }else{  
                            isCheckedMap.put(id,false); 
                        } 
                    }  
                });  
                return convertView;   
            } 
            public final class ViewHolder {     
                public TextView tvName;     
                public ImageButton deleteButton;     
                public CheckBox cBox;     
            }     
        } 
        
        class Item { 
            private Integer id; 
            private String name; 
        } 
            
    }


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI