我们知道Android自带的multiple listview的实现是通过checkedTextView来实现的,但是这个控件很难看,而且一行内容布局固定。
以下我们自定义一个:
mListView = (ListView)findViewById(R.id.listview);
mListView.setCacheColorHint(0);
mListView.setItemsCanFocus(false);
mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
Adapter定义:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Data data = mDataList.get(position);
if (convertView == null){
convertView = mInflater.inflate(R.layout.xxxx, null);
}
TextView nameView = (TextView)convertView.findViewById(R.id.name);
nameView.setText(data.FullName);
ImageView checkView = (ImageView)convertView.findViewById(R.id.check_view);
if (mListView.getAdapter() != null){
SparseBooleanArray checkedArray = mListView.getCheckedItemPositions();
if (0 <= position && position < checkedArray.size()){
if (checkedArray.valueAt(position)){
checkView.setImageResource(R.drawable.checkbox_selected);
}
else{
checkView.setImageResource(R.drawable.checkbox_unselected);
}
}
}
return convertView;
}
xxxx.xml布局文件实现
<?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"
>
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/black"
android:layout_marginLeft="10dip"
android:gravity="center_vertical"
/>
<ImageView
android:id="@+id/check_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginRight="10dip"
android:layout_centerVertical="true"
android:background="@drawable/checkbox_unselected"
/>
</RelativeLayout>