compoundbutton(compoundbutton用法)
android新手遇到问题 无法解决。错误信息:The method setOnCheckedChangeListener...
setOnCheckedChangeListener方法的参数应该是
CompoundButton.OnCheckedChangeListener类型的
而你传给他的是MainActivity.RadioButtonListener,参数类型不匹配
android怎么让listview的checkbox单选
还是先来看看是不是你想要的效果:
不废话,直接上代码,很简单,代码里都有注释
单选
public class SingleActivity extends AppCompatActivity {
private ListView listView;
private ArrayListString groups;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_single);
listView = (ListView) this.findViewById(R.id.lvGroup);
groups = new ArrayListString();
groups.add("11");
groups.add("22");
groups.add("33");
groups.add("44");
groups.add("55");
groups.add("66");
groups.add("77");
AdapterView.OnItemClickListener listItemClickListener = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView? parent, View view, int position, long id) {
// 取得ViewHolder对象,这样就省去了通过层层的findViewById去实例化我们需要的cb实例的步骤
SingleAdapter.ViewHolder viewHolder = (SingleAdapter.ViewHolder) view.getTag();
viewHolder.cb.toggle();// 把CheckBox的选中状态改为当前状态的反,gridview确保是单一选中
}
};
SingleAdapter adapter = new SingleAdapter(this, groups);
listView.setAdapter(adapter);
listView.setOnItemClickListener(listItemClickListener);
}
}
Adapter:
public class SingleAdapter extends BaseAdapter {
private Activity activity;//上下文
private ArrayListString list;
private LayoutInflater inflater = null;//导入布局
private int temp = -1;
public SingleAdapter(Activity context, ArrayListString list) {
this.activity = context;
this.list = list;
inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
//listview每显示一行数据,该函数就执行一次
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {//当第一次加载ListView控件时 convertView为空
convertView = inflater.inflate(R.layout.group_item_view, null);//所以当ListView控件没有滑动时都会执行这条语句
holder = new ViewHolder();
holder.tv = (TextView) convertView.findViewById(R.id.item_tv);
holder.cb = (CheckBox) convertView.findViewById(R.id.item_cb);
convertView.setTag(holder);//为view设置标签
} else {//取出holder
holder = (ViewHolder) convertView.getTag();
}
//设置list的textview显示
holder.tv.setTextColor(Color.WHITE);
holder.tv.setText(list.get(position));
// 根据isSelected来设置checkbox的选中状况
holder.cb.setId(position);//对checkbox的id进行重新设置为当前的position
holder.cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
if (isChecked) {//实现checkbox的单选功能,同样适用于radiobutton
if (temp != -1) {
//找到上次点击的checkbox,并把它设置为false,对重新选择时可以将以前的关掉
CheckBox tempCheckBox = (CheckBox) activity.findViewById(temp);
if (tempCheckBox != null)
tempCheckBox.setChecked(false);
}
temp = compoundButton.getId();//保存当前选中的checkbox的id值
}
}
});
if (position == temp)//比对position和当前的temp是否一致
holder.cb.setChecked(true);
else
holder.cb.setChecked(false);
return convertView;
}
public static class ViewHolder {
TextView tv;
CheckBox cb;
}
}
多选:
public class MulActivity extends AppCompatActivity {
private ListView listView;
private ArrayListString groups;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mul);
listView = (ListView) this.findViewById(R.id.list);
groups = new ArrayList();
groups.add("11");
groups.add("22");
groups.add("33");
groups.add("44");
groups.add("55");
groups.add("66");
groups.add("77");
AdapterView.OnItemClickListener listItemClickListener = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView? parent, View view, int position,
long id) {
// 取得ViewHolder对象,这样就省去了通过层层的findViewById去实例化我们需要的cb实例的步骤
MulAdapter.ViewHolder viewHolder = (MulAdapter.ViewHolder) view.getTag();
viewHolder.cb.toggle();// 把CheckBox的选中状态改为当前状态的反,gridview确保是单一选中
MulAdapter.getIsSelected().put(position, viewHolder.cb.isChecked());//将CheckBox的选中状况记录下来
}
};
MulAdapter adapter = new MulAdapter(this, groups);
listView.setAdapter(adapter);
listView.setOnItemClickListener(listItemClickListener);
}
}
Adapter:
public class MulAdapter extends BaseAdapter {
private Context context;//上下文
private ArrayListString list;
//控制CheckBox选中情况
private static HashMapInteger, Boolean isSelected;
private LayoutInflater inflater = null;//导入布局
public MulAdapter(Context context, ArrayListString list) {
this.context = context;
this.list = list;
inflater = LayoutInflater.from(context);
isSelected = new HashMapInteger, Boolean();
initData();
}
private void initData() {//初始化isSelected的数据
for (int i = 0; i list.size(); i++) {
getIsSelected().put(i, false);
}
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
//listview每显示一行数据,该函数就执行一次
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {//当第一次加载ListView控件时 convertView为空
convertView = inflater.inflate(R.layout.group_item_view, null);//所以当ListView控件没有滑动时都会执行这条语句
holder = new ViewHolder();
holder.tv = (TextView) convertView.findViewById(R.id.item_tv);
holder.cb = (CheckBox) convertView.findViewById(R.id.item_cb);
convertView.setTag(holder);//为view设置标签
} else {//取出holder
holder = (ViewHolder) convertView.getTag();//the Object stored in this view as a tag
}
//设置list的textview显示
holder.tv.setTextColor(Color.WHITE);
holder.tv.setText(list.get(position));
// 根据isSelected来设置checkbox的选中状况
holder.cb.setChecked(getIsSelected().get(position));
return convertView;
}
public static class ViewHolder {
TextView tv;
CheckBox cb;
}
public static HashMapInteger, Boolean getIsSelected() {
return isSelected;
}
public static void setIsSelected(HashMapInteger, Boolean isSelected) {
MulAdapter.isSelected = isSelected;
}
}
以上所述是给介绍的Android中ListView + CheckBox实现单选、多选效果
该如何改变checkbox被选中时那个勾勾的颜色 Android
首先你要准备两张图,一张是未勾选的checkbox样式图,一张是勾选的样式图。
然后在drawable文件夹中添加drawable文件checkbox_style.xml。
如下:
?xml version="1.0" encoding="utf-8"?
selector xmlns:android=""
!-- 勾选的样式图放到res目录下的drawable中,然后在这里使用 --
item android:drawable="@drawable/checkbox_pressed" android:state_checked="true"/
!-- 未勾选的样式图放到res目录下的drawable中,然后在这里使用 --
item android:drawable="@drawable/checkbox_normal" android:state_checked="false"/
item android:drawable="@drawable/checkbox_normal"/
/selector
再来是在values文件夹下的styles.xml文件中添加CustomCheckboxTheme样式。
style name="CustomCheckboxTheme" parent="@android:style/Widget.CompoundButton.CheckBox"
item name="android:button"@drawable/checkbox_style/item
/style
最后在布局文件中使用CustomCheckboxTheme样式。
CheckBox
android:id="@+id/select_all"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/CustomCheckboxTheme" /
android checkbox选中不选中
CheckBox和Button一样,也是一种古老的控件,它的优点在于,不用用户去填写具体的信息,只需轻轻点击,缺点在于只有“是”和“否”两种情况,但往往利用它的这个特性,来获取用户的一些信息。如一个身份表单中,常常让用户填写“是否已经结婚”,显然让用户去填写“是”或“否”是不合理的,理想的情景是用如下控件:
选中后的状态:
建立checkBox的布局:
CheckBox
android:id="@+id/cb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="false"
android:text="已婚"
/CheckBox
显然,Checked属性是CheckBox最重要的属性之一,改变它的方式有三种:
1、XML中申明,在xml布局中指定默认的状态android:checked="true"。
2、代码动态改变,在Java中可以直接调用checkbox.setChecked(true);
3、用户触摸,即注册OnCheckedChangeListener事件。
实例如下:
//获取CheckBox实例
CheckBox cb = (CheckBox)this.findViewById(R.id.cb);
//绑定事件
cb.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
// TODO Auto-generated method stub
Toast.makeText(MyActivity.this, arg1?"选中了":"取消了选中" , Toast.LENGTH_LONG).show();
}
});
在开发当中,默认的状态是未选中的,如果需要默认选中,通常是在xml中指定即可。
Android编程如何在onCheckedChanged(CompoundButton arg0, boolean arg1)中限制CheckBox的选择数量。
做一个全局的计数器,统计选择的个数,然后在oncheckchanged方法内根据checkbox的状态对计数器进行加减运算,再判断是否达到6个再取消该按钮的选择即可
Android中如何创建自定义的复选框?
1.首先在drawable文件夹中添加drawable文件checkbox_style.xml。
?xml version="1.0" encoding="utf-8"?
selector xmlns:android=""
item android:drawable="@drawable/checkbox_pressed" android:state_checked="true"/
item android:drawable="@drawable/checkbox_normal" android:state_checked="false"/
item android:drawable="@drawable/checkbox_normal"/
/selector
2.在values文件夹下的styles.xml文件中添加CustomCheckboxTheme样式。
style name="CustomCheckboxTheme" parent="@android:style/Widget.CompoundButton.CheckBox"
item name="android:button"@drawable/checkbox_style/item
/style
3.在布局文件中使用CustomCheckboxTheme样式。
CheckBox
android:id="@+id/select_all"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/CustomCheckboxTheme" /
使用到的图片资源
checkbox_normal.png
checkbox_pressed.png