实现自定义checkbox listview的方法
来源:互联网 发布:清华软件学院排名 编辑:程序博客网 时间:2024/06/05 11:54
1。方法一:利用adapter这种方法的原理
破坏view的重用,使用List保存checkchange状态,然后在bindview中添加根据list的状态修改checkbox的勾。
注意mCheckItemView.mCheckBox.setOnCheckedChangeListener(null);修改前屏蔽事件
package com.handcent.im.adapter;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.database.Cursor;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.CursorAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.handcent.im.ui.R;
public class CheckedCursorAdapter extends CursorAdapter {
private List<Integer> mCheckedList;
public CheckedCursorAdapter(Context context, Cursor c) {
super(context, c);
mCheckedList = new ArrayList<Integer>();
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
System.out.println("bind");
CheckItemView mCheckItemView = new CheckItemView();
mCheckItemView.mHeadView = (ImageView) view.findViewById(R.id.ci_img_head);
mCheckItemView.mNickName = (TextView) view.findViewById(R.id.ci_txt_name);
mCheckItemView.mSignature = (TextView) view.findViewById(R.id.ci_txt_signure);
mCheckItemView.mCheckBox = (CheckBox) view.findViewById(R.id.ci_chk_choose);
// mCheckItemView.mCheckBox.setTag(cursor.getInt(0));
for (int i : mCheckedList) {
System.out.println("checkLIst:" + i);
}
mCheckItemView.mCheckBox.setOnCheckedChangeListener(null);
if (mCheckedList.contains(cursor.getInt(0))) {
mCheckItemView.mCheckBox.setChecked(true);
} else {
mCheckItemView.mCheckBox.setChecked(false);
}
mCheckItemView.mCheckBox.setTag(cursor.getInt(0));
mCheckItemView.mCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
// checkbox更改状态
Integer index = (Integer) buttonView.getTag();
if (isChecked) {
if (!mCheckedList.contains(index))
mCheckedList.add(index);
} else {
mCheckedList.remove(index);
}
}
});
mCheckItemView.mNickName.setText(cursor.getString(1));
mCheckItemView.mSignature.setText(cursor.getString(2));
// int tag = (Integer) mCheckItemView.mCheckBox.getTag();
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
LayoutInflater mInflater = LayoutInflater.from(context);
View mView = mInflater.inflate(R.layout.contactitem, null);
return mView;
}
private class CheckItemView {
private ImageView mHeadView;
private TextView mNickName;
private TextView mSignature;
private CheckBox mCheckBox;
}
}
2。方法二:使用CheckedTextView
原理:自定义一个继承Checkable的Linearlayout或者RelativeLayout,在其中放置一个CheckedTextView不使用TextView的值而达到效果
package com.handcent.im.ui.view;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.Checkable;
import android.widget.CheckedTextView;
import android.widget.RelativeLayout;
/**
* custom view extends {@link RelativeLayout} and implements {@link Checkable}
* to response the action CheckBox
*
* @author Pandans
*
*/
public class ChkRelativeLayout extends RelativeLayout implements Checkable {
private CheckedTextView _checkbox;
public ChkRelativeLayout(Context context) {
super(context);
}
public ChkRelativeLayout(Context context, AttributeSet set) {
super(context, set);
}
@Override
public boolean isChecked() {
return _checkbox != null ? _checkbox.isChecked() : false;
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
// find checked text view
int childCount = getChildCount();
for (int i = 0; i < childCount; ++i) {
View v = getChildAt(i);
if (v instanceof CheckedTextView) {
_checkbox = (CheckedTextView) v;
}
}
}
/**
* <p>
* Changes the checked state of this LinearLayout
* </p>
*
* @param checed
* true to check the LinearLayout ,false to uncheck it
*/
@Override
public void setChecked(boolean checked) {
if (_checkbox != null) {
_checkbox.setChecked(checked);
}
}
@Override
public void toggle() {
if (_checkbox != null) {
_checkbox.toggle();
}
}
}
- 实现自定义checkbox listview的方法
- Android---自定义带CheckBox的ListView实现
- 带checkbox的ListView实现(二)——自定义Checkable控件的实现方法
- 带checkbox的ListView实现(二)——自定义Checkable控件的实现方法
- 带checkbox的ListView实现(二)——自定义Checkable控件的实现方法
- 带checkbox的ListView实现——自定义Checkable控件的实现方法
- 支持多选的ListView实现方法(不需要CheckBox)
- 如何自定义带checkbox的Android ListView
- 自定义实现带checkbox的listView(用于项目中的多语言实现界面)
- Android开发:setContentView切换界面,自定义带CheckBox的ListView显示SQlite条目-----实现
- 自定义ListView item包含checkbox实现单选记录自己开发是遇到的问题
- 带checkbox的ListView实现(三)——CheckableImageView的实现方法
- 带checkbox的ListView实现(三)——CheckableImageView的实现方法
- Android 使用CheckBox实现ListView自定义单选
- 实现带图片和checkbox的listview
- 实现带图片和checkbox的listview
- 关于checkbox的ListView实现多选、全选、反选、删除更简单的方法
- Delphi中ListView中实现自定义删除功能的方法
- [数据挖掘]关联规则挖掘
- 关于自学和找工作的权重
- Android AM命令行启动程序的方法
- DCMTK开源库的学习笔记1:将DCM文件保存成BMP文件或数据流(即数组)
- JAVA Integer的一点注意事项
- 实现自定义checkbox listview的方法
- 坐标
- TCP/IP-复习笔记(1)UDP
- javax.el.PropertyNotFoundException: Property 'xxx' not found on type
- 检查apache服务器是否正在运行的脚本
- SQL----多张表连接查询,只查出符合条件的数据
- HDU 1401 双向状态搜索
- 数组进行增、删、查、改
- using语句