compoundbutton(compoundbutton用法)

http://www.itjxue.com  2023-02-09 19:27  来源:未知  点击次数: 

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

(责任编辑:IT教学网)

更多

推荐网络赚钱文章