android listview 滑动时混乱,Android中关于在ListView中使用使用RadioGroup时出现数据错位和混乱的解决方式...

本文探讨了ListView中使用item复用时遇到的问题,针对RadioGroup和特殊条件展示的控件,提出了解决方案:一是禁用复用,二是利用HashMap保存position与数据映射。实例展示了如何在RadioAdapter中实现这一过程。

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

当我们在使用ListView的时候,一般都会在getView()方法里面使用item复用的方式,如下:

ViweHolder view = null;

if(convertView == null){

...

}

....

return convertVew;

当我们在Item有RadioGroup控件 ,或是需要有其他条件来判断当前Item是否需要展示一个或多个控件,当我们随意滑动ListView你会发现本来不满足条件的Item也显示出控件或者是错位等情况。这就是由于复用导致的,解决方式有两种:1、不使用item的复用,2、使用一个HashMap来保存position于数据之间的关系。

//这里以RadioButon为例

public class RadioAdapter extends BaseAdapter {

Map map = new HashMap();

@Override

public int getCount() {

return 0;

}

@Override

public Object getItem(int position) {

return null;

}

@Override

public long getItemId(int position) {

return 0;

}

@Override

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

VIewHolder vh = null;

if(convertView == null){

convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.radioItem,parent,false);

holder = createViewHolder(convertView);

convertView.setTag(holder);

}else{

vh = convertView.getTag();

}

vh.radioButton.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {

@Override

public void onCheckedChanged(RadioGroup group, int checkedId) {

swicth(checkedId){

case R.id.x:

map.put(position,checkedId);

break;

case R.id.y:

map.put(position,checkedId);

break;

}

}

});

if(map.containsKey(position)){

if(map.get(position) == R.id.x){

vh.rbx.setChecked(true);

}else if(map.get(position) == R.id.y){

vh.rby.setChecked(true);

}

}else{

}

return convertView;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值