Android ListView在有checkbox的情况下上下滑动选中状态错误以及position错乱
2016-12-11 19:26
603 查看
在处理有checkbox的ListViewd的时候,如果我们选中了上面几个checkbox,下拉到后面,一些在下面的checkbox也会出现选中的状态,这是由于checkbox控件复用的缘故,解决这个问题有以下方式:
1、在数据源对象中设置一个boolean变量记录checkbox是否选中,然后在getView中添加以下代码:
2、在adapter中新建一个列表存储点击情况,然后根据存储的情况设置checkbox的点击:
在getView中添加以下代码:
第一种方式比较简洁,如果不能添加对象变量的情况下使用第二种
在使用ListView删除的时候,也碰到pos错乱的问题,直接导致了删除的时候数组出界了。
以上是错误代码,产生问题的关键是,传入的position是正确的,但是到达onClick里面的时候,position就和外面的传参不一样了,查不出来原因,现在的解决办法是,设置一个全局变量在外面,记录一下传入函数的position,在onClick里面使用全局变量。
1、在数据源对象中设置一个boolean变量记录checkbox是否选中,然后在getView中添加以下代码:
cb.setChecked(bean.isCheck()); cb.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { bean.setIsCheck(cb.isChecked()); } });
2、在adapter中新建一个列表存储点击情况,然后根据存储的情况设置checkbox的点击:
private List<Integer> mPostions = new ArrayList<>();
在getView中添加以下代码:
cb.setChecked(false); if (mPostions.contains(viewHolder.getPosition())) { cb.setChecked(true); } cb.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (cb.isChecked()) { mPostions.add(viewHolder.getPosition()); } else { mPostions.remove((Integer) viewHolder.getPosition()); } } });以上代码基于共同适配器,没有共同适配器的情况,请用getView里面的参量position代替viewHolder.getPosition()
第一种方式比较简洁,如果不能添加对象变量的情况下使用第二种
在使用ListView删除的时候,也碰到pos错乱的问题,直接导致了删除的时候数组出界了。
@OnItemLongClick(R.id.list_allreserves) public boolean deleteReserve(final int position) { isMenuMode = true; // viewstub还没有加载 if (mMenu == null) { ((ViewStub) findViewById(R.id.stub_menu)).inflate(); mMenu = findViewById(R.id.flyt_menu); mMenu.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { hideMenu(); } }); ((TextView) findViewById(R.id.tv_menu_delete)).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 移除预约 mDatas.remove(position); refreshList(); hideMenu(); } }); } mMenu.setVisibility(View.VISIBLE); return true; }
以上是错误代码,产生问题的关键是,传入的position是正确的,但是到达onClick里面的时候,position就和外面的传参不一样了,查不出来原因,现在的解决办法是,设置一个全局变量在外面,记录一下传入函数的position,在onClick里面使用全局变量。
@OnItemLongClick(R.id.list_allreserves) public boolean deleteReserve(int position) { // 是否本人操作检查 TODO isMenuMode = true; currentPosition = position; // viewstub还没有加载 if (mMenu == null) { ((ViewStub) findViewById(R.id.stub_menu)).inflate(); mMenu = findViewById(R.id.flyt_menu); mMenu.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { hideMenu(); } }); ((TextView) findViewById(R.id.tv_menu_delete)).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 移除预约 if (currentPosition != -1) { mDatas.remove(currentPosition); currentPosition = -1; } refreshList(); hideMenu(); } }); } mMenu.setVisibility(View.VISIBLE); return true; }
相关文章推荐
- android listview + checkbox 列表上下滑动导致复选框状态丢失解决办法
- android ListView包含CheckBox时滑动丢失选中状态的解决
- Android中ListView包含CheckBox时滑动丢失选中状态的解决
- Android中ListView包含CheckBox时滑动丢失选中状态的解决
- Android中ListView数据不止一页,滑动后CheckBox丢失选中状态
- Android中ListView包含CheckBox时滑动丢失选中状态的解决
- Android中ListView包含CheckBox时滑动丢失选中状态的解决
- Android中ListView包含CheckBox时滑动丢失选中状态的解决
- Android中ListView包含CheckBox时滑动丢失选中状态的解决
- Android中ListView包含CheckBox时滑动丢失选中状态的解决
- AndroidのListView包含CheckBox时滑动丢失选中状态的解决
- Android 购物车全选以及listview中checkbox状态
- android 根据原理分析ListView滑动checkbox状态被清除 不保存
- 求代码:android listview checkbox 从数据库里读取数据后怎么设置相应的checkbox为选中状态
- ListView嵌套CheckBox滑动时CheckBox选中状态错乱
- android自定义listview,添加监听器,解决屏幕滑动组件状态干扰的问题checkbox ...
- 解决android中listview中嵌套checkbox滑动时checkbox状态改变问题
- Android -- ListView控件 去上下滑动阴影 选中背景黄色
- android ListView控件 去上下滑动阴影 选中背景黄色
- android开发--listview中checkbox的选中状态