给ListView的Item添加CheckBox,长按调出CheckBox,然后通过点击进行选中和取消

  • 首先制作一个CheckBox式样
  • 在drawable文件夹中添加文件custom_checkbox_style.xml,内容如下
    
    
    
    
    
    

  • 在values文件夹的styles.xml文件中添加如下内容

  • 在ListView的Item的布局文件中添加CheckBox的相关代码,内容如下
    
    
    
    .
    .
    .
    .
    .
    .
    

  • 特别要说一下android:descendantFocusability="blocksDescendants"这个属性,它的作用是使该控件包含的子控件全部失去焦点,即失去点击效果和作用,这个属性很重要,如果不添加,在这个布局中获取点击焦点的就是CheckBox,而ListView的onItemClick事件就不能触发了
  • 然后要修改的就是代码逻辑问题了,修改位置是vender/mediatek/properties/packags/apps/FileManager/src/com/mediatek/filemanager/FileInfoAdapter.java
  • 代码中定义了一个FileViewHolder用来管理ListView的Item布局(即上面的写道的布局文件)中的所用控件,这里我们要添加一个CheckBox对象,并在构造方法中进行初始化
    static class FileViewHolder{
    protect TextView mName;
    protect TextView mSize;
    protect ImageView mIcon;
    protect CheckBox mCheckBox;
    
    public FileViewHolder(TextView name,TextView size,ImageView icon,CheckBox checkbox){
    this.mName=name;
    this.mSize=size;
    this.mIcon=icon;
    this.mCheckBox=checkbox;
    }
    }

  • 最后对getView方法进行修改,这里要清楚getView的实现机制,是如何加载布局的(参考:http://blog.csdn.net/yelbosh/article/details/7831812),主动刷新ListView的item视图可以主动调用方法notifyDataSetChanged();此时如果item布局有改变则ListView中的所有item都随之刷新。
  • FileViewHolder viewHolder;
    
    if(view==null){
    view=mInflater.inflate(R.layout.adapter_fileinfos,null);
    viewHolder=new FileViewHolder((TextView)view.findViewById(R.id.ecit_adapter_name),(TextView)view.findViewById(R.id.edit_adapter_size),(ImageView)view.findViewById(R.id.edit_adapter_img),(CheckBox)view.findViewById(R.id.edit_select));
    view.setTag(viewHolder);
    }else{
    viewHolder=(FileViewHolder)view.getTag();
    }
    
    FileInfo currentItem=mFileInfoList.get(pos);
    
    switch(mMode){
    case MODE_EDIT:
    viewHolder.mCheckBox.setVisibility(View.VISIBLE);//编辑状态下将CheckBox设置为可见
    if(currentItem.isChecked()){
    viewHolder.mCheckBox.setChecked(true);//如果当前的item在编辑状态下被选中,则将CheckBox的checked状态设为true
    }else{
    viewHolder.mCheckBox.setChecked(false);//如果没有被选中,则为false
    }
    break;
    case MODE_NORMAL:
    viewHolder.mCheckBox.setVisibility(View.GONE);//在正常模式下需要将CheckBox去掉
    .
    .
    .
    }

你可能感兴趣的:(android)