android checkbox选中后listview id,Android ListView带CheckBox实现item单选、取消选择

本文介绍如何在Android应用中使用ListView结合CheckBox实现单选功能。通过创建一个包含状态的Person类,设置OnItemClickListener监听选择状态,并在Adapter的getView方法中更新CheckBox的选中状态。此方法适用于需要在列表中进行单选操作的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

ListView带CheckBox实现单选在Android开发中会经常用到,通常的做法就是用一个bean记录CheckBox的状态,每次getView时去判断这个bean的状态。

演示如下:

69b5e399142e

ListView带CheckBox实现单选.gif

实例代码:

Person:java bean数据

public class Person implements Serializable{

private String Title ; //每条item的数据

private boolean isChecked; //每条item的状态

public Person(String title){

Title = title;

}

public String getTitle() {

return Title;

}

public void setTitle(String title) {

Title = title;

}

public boolean isChecked() {

return isChecked;

}

public void setChecked(boolean checked) {

isChecked = checked;

}

}

MainActivity:在OnItemClickListener通过Person中的isChecked状态来控制CheckBox是否选中。

public class MainActivity extends AppCompatActivity {

@Bind(R.id.lv_main)

ListView mListView;//listview控件

List datas = new ArrayList();//数据集合

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main_layout);

ButterKnife.bind(this);

//创建数据

for(int i = 0;i<20;i++){

datas.add(new Person("张三"+i));

}

final MyAdapter myAdapter = new MyAdapter(this);

myAdapter.setDatas(datas);

mListView.setAdapter(myAdapter);

mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

int currentNum = -1;

@Override

public void onItemClick(AdapterView> parent, View view, int position, long id) {

for(Person person : datas){ //遍历list集合中的数据

person.setChecked(false);//全部设为未选中

}

if(currentNum == -1){ //选中

datas.get(position).setChecked(true);

currentNum = position;

}else if(currentNum == position){ //同一个item选中变未选中

for(Person person : datas){

person.setChecked(false);

}

currentNum = -1;

}else if(currentNum != position){ //不是同一个item选中当前的,去除上一个选中的

for(Person person : datas){

person.setChecked(false);

}

datas.get(position).setChecked(true);

currentNum = position;

}

Toast.makeText(parent.getContext(),datas.get(position).getTitle(),Toast.LENGTH_SHORT).show();

myAdapter.notifyDataSetChanged();//刷新adapter

}

});

}

}

MyAdapter:在Adapter适配器中贴出了重要的getView代码,在getView中根据position位置状态及javaBean做状态判断。

@Override

public View getView(final int position, View convertView, ViewGroup parent) {

//listView优化部分

ViewHolder mViewHolder;

if (convertView == null) {

convertView = LayoutInflater.from(mContext).inflate(R.layout.item_checkbox, parent, false);

mViewHolder = new ViewHolder(convertView);

convertView.setTag(mViewHolder);

}else {

mViewHolder = (ViewHolder) convertView.getTag();

}

//判断CheckBox的状态

if(mDatas.get(position).isChecked()){

mViewHolder.mCbCheckbox.setChecked(true);//选中

}else {

mViewHolder.mCbCheckbox.setChecked(false);//未选中

}

mViewHolder.mTvTitle.setText(mDatas.get(position).getTitle());

return convertView;

}

//listview优化使用的holder

static class ViewHolder {

@Bind(R.id.tv_title)

TextView mTvTitle;

@Bind(R.id.cb_checkbox)

CheckBox mCbCheckbox;

ViewHolder(View view) {

ButterKnife.bind(this, view);

}

}

Item_checkbox.xml

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent">

android:id="@+id/tv_title"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_margin="10dp"

android:text="我是谁"/>

android:id="@+id/cb_checkbox"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentRight="true"

android:layout_margin="10dp"

android:clickable="false"

android:focusable="false"

android:focusableInTouchMode="false"

/>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值