当前位置: 首页 > news >正文

android listview checkbox 选中状态,Android ListView专题之十  checkbox选中的值在翻屏时会跳来跳去...

翻屏前选择了2,3,4,5

a4c26d1e5885305701be709a3d33442f.png

翻屏后

a4c26d1e5885305701be709a3d33442f.png

向上翻屏,选择的还是2,3,4,5

a4c26d1e5885305701be709a3d33442f.png

其实就是红色的地方是关键点,用了一个集合来保存cb的选择状态,其它的关于viewHolder和和inflate的布局什么就不说了

public class ListViewCheckboxActivityextends

Activity implements OnCheckedChangeListener {

private ListView listView;

private

List

Object>> list;

private CheckBox cball;

ListViewAdapter adapter;

@Override

protected void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

listView = (ListView)

findViewById(R.id.lv);

cball = (CheckBox)

findViewById(R.id.cball);

cball.setOnCheckedChangeListener(this);//全选

list = buildList();

adapter = new

ListViewAdapter(this, list);

listView.setAdapter(adapter);

}

private

List

Object>> buildList() {

List

Object>> list = new

ArrayList

Object>>();

for (int i = 0; i

< 20; i++) {

Map map = new

HashMap();

map.put("icon", R.drawable.icon);

map.put("title", "主题" + (i + 1));

list.add(map);

}

return list;

}

class ListViewAdapter extends BaseAdapter {

private Context context;

private

List

Object>> list;

private LayoutInflater

inflater;

private

List checkBoxesStatus;

public ListViewAdapter(Context

context, List

Object>> list) {

super();

this.context =

context;

this.list =

list;

int listsize =

list.size();

checkBoxesStatus = new

ArrayList(listsize);

for(int i =

0;i

checkBoxesStatus.add(false);

}

this.inflater

= LayoutInflater.from(context);

}

public

List

Object>> getList() {

return

list;

}

public

List getCheckBoxesStatus()

{

return

checkBoxesStatus;

}

@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;

}

@Override

public View getView(final int

position, View convertView, ViewGroup parent) {

ViewHolder

viewHolder = null;

Map map =

list.get(position);

Boolean

checkBoxStatus = checkBoxesStatus.get(position);

if

(convertView == null) {

convertView

= inflater.inflate(R.layout.list_item, null);

viewHolder =

new ViewHolder();

viewHolder.img = (ImageView)

convertView.findViewById(R.id.icon);

viewHolder.tv = (TextView)

convertView.findViewById(R.id.title);

viewHolder.cb = (CheckBox) convertView.findViewById(R.id.cb);

convertView.setTag(viewHolder);

}else{

viewHolder =

(ViewHolder) convertView.getTag();

}

viewHolder.img.setImageResource((Integer) map.get("icon"));

viewHolder.tv.setText((String) map.get("title"));

viewHolder.cb.setId(position);

viewHolder.cb.setChecked(checkBoxStatus);

viewHolder.cb.setOnCheckedChangeListener(new

OnCheckedChangeListener() {

@Override

public void

onCheckedChanged(CompoundButton buttonView, boolean isChecked)

{

checkBoxesStatus.set(buttonView.getId(), isChecked);

notifyDataSetChanged();

}

});

return

convertView;

}

}

static class ViewHolder {

private ImageView img;

private TextView tv;

private CheckBox cb;

}

@Override

public void onCheckedChanged(CompoundButton

buttonView, boolean isChecked){

List checkBoxesStatus =

adapter.getCheckBoxesStatus();

for(int i =

0;i

checkBoxesStatus.set(i, isChecked);

}

adapter.notifyDataSetChanged();

}

相关文章:

  • 鸿蒙系统翻车了,鸿蒙系统翻车了?任正非承认忽视了关键问题,称华为犯下大错误...
  • android10侧滑返回黑屏,Android实现类似IOS右滑返回的效果(原因分析及解决办法)
  • 华为 android 安全,华为 EMUI/Magic UI 安全更新 2020-3
  • 华为mate50麒麟处理器鸿蒙系统,华为Mate50Pro概念图:有鸿蒙OS,处理器你选择麒麟还是高通?...
  • html右侧箭头是什么控件,html实现右箭头
  • html免费教程在线,免费HTML5在线教程 - 踏得网
  • android 单例设计模式,Android设计模式之单例模式
  • html5媒体查询的特点,HTML5 的媒体查询用多了好么?
  • html 数据校验,表单数据校验
  • 回收站有html文件,怎么找回回收站删除的文件 强烈推荐互盾专家上线支招
  • 计算机专业班级网站,计算机专业班级标语
  • 南昌计算机网络技术好的学校,南昌五制大专计算机网络技术
  • illustrator cc 导出html,提取 CSS | Illustrator
  • 举头望明月打计算机术语,简单的中秋灯谜及答案
  • 计算机入门新人必学,电脑新手入门教程 让你快速上手
  • 08.Android之View事件问题
  • Cookie 在前端中的实践
  • CSS 提示工具(Tooltip)
  • Elasticsearch 参考指南(升级前重新索引)
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • 从重复到重用
  • 对超线程几个不同角度的解释
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 码农张的Bug人生 - 见面之礼
  • 三栏布局总结
  • 学习HTTP相关知识笔记
  • 学习JavaScript数据结构与算法 — 树
  • Python 之网络式编程
  • (1)(1.11) SiK Radio v2(一)
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (转)【Hibernate总结系列】使用举例
  • (转)大型网站架构演变和知识体系
  • **CI中自动类加载的用法总结
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET Core Web APi类库如何内嵌运行?
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .Net mvc总结
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • // an array of int
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • [2019.2.28]BZOJ4033 [HAOI2015]树上染色
  • [AIGC] Nacos:一个简单 yet powerful 的配置中心和服务注册中心
  • [EFI]Dell Inspiron 15 5567 电脑 Hackintosh 黑苹果efi引导文件
  • [github配置] 远程访问仓库以及问题解决
  • [JS]JavaScript 简介
  • [Kubernetes]4. 借助腾讯云TKE快速创建Pod、Deployment、Service部署k8s项目
  • [Linux] Boot分区满了的处理方法 The volume boot has only 0 bytes disk space remaining
  • [Linux]history 显示命令执行的时间
  • [NOIP2014] 提高组 洛谷P1941 飞扬的小鸟