- 首先制作一个CheckBox式样
- 在drawable文件夹中添加文件custom_checkbox_style.xml,内容如下
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/fm_checkbox_pressed" android:state_checked="true"/> <item android:drawable="@drawable/fm_checkbox_normal" android:state_checked="false"/> <item android:drawable="@drawable/fm_checkbox_normal"/> </selector>
- 在values文件夹的styles.xml文件中添加如下内容
<style name="CustomCheckBoxTheme" parent="@android:style/Widget.CompoundButton.CheckBox"> <item name="android:button">@drawable/custom_checkbox_style</item> </style>
- 在ListView的Item的布局文件中添加CheckBox的相关代码,内容如下
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ...... android:descendantFocusability="blocksDescendants"> <CheckBox android:id="@+id/edit_select" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginStart="6dp" android:layout_marginEnd="6dp" style="@style/CustomCheckboxTheme" android:visibility="gone"/> . . . . . . </LinearLayout>
- 特别要说一下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去掉 . . . }
给ListView的Item添加CheckBox,长按调出CheckBox,然后通过点击进行选中和取消
最新推荐文章于 2022-08-06 18:38:00 发布