版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/aaa1050070637/article/details/82254442
描述一下,就是我的listview里面有checkbox,我需要在选中item的时候,选中对应的checkbox,这个需求是OK了。
但是发现一个问题,就是我选中第一个,那么第5个,或者第6个(这个取决于每页显示的个数)也会响应,纠结了很久,
问题还是没有得到解决,我贴出来让大家看看
public class PullDownAdapter extends BaseAdapter {
public interface NumberCallBack {
void changeNumber(boolean isClick, int position);
}
private List<String> itemDatas = null;
private Context mContext;
private int select = 999999999;
private NumberCallBack callBack;
//记录是否被点击
public int first[];
public PullDownAdapter(List<String> itemDatas, Context mContext, NumberCallBack callBack) {
this.itemDatas = itemDatas;
this.mContext = mContext;
this.callBack = callBack;
first = new int[itemDatas.size()];
for (int i = 0; i < itemDatas.size(); i++) {
first[i] = 0;
}
}
@Override
public int getCount() {
if (itemDatas != null) {
return itemDatas.size();
} else {
return 0;
}
}
@Override
public Object getItem(int position) {
if (itemDatas != null) {
return itemDatas.get(position);
} else {
return 0;
}
}
public void setSelect(int position) {
this.select = position;
this.notifyDataSetChanged();
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder hold = null;
if (convertView == null) {
hold = new ViewHolder();
convertView = LayoutInflater.from(mContext).inflate(
R.layout.item_pull_down, null);
hold.textView = convertView.findViewById(R.id.tv_pull_down_txt);
hold.check = convertView.findViewById(R.id.cb_pull_down);
convertView.setTag(hold);
} else {
hold = (ViewHolder) convertView.getTag();
}
if (select == position) {
if (first[position] == 0) {
hold.check.setChecked(false);
callBack.changeNumber(false, select);
} else {
hold.check.setChecked(true);
callBack.changeNumber(true, select);
}
select = 999999999;
}
hold.textView.setText(itemDatas.get(position));
return convertView;
}
class ViewHolder {
TextView textView;
CheckBox check;
}
}
//listview item点击事件
lvSequences.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (adapter.first[position] == 0) {
adapter.first[position] = 1;
} else {
adapter.first[position] = 0;
}
adapter.setSelect(position);
}
});
已经找到了解决的方法,贴出来给大家看一下
hold.check.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
checkMap.put(position, isChecked);
}
});
if (checkMap.get(position) != null) {
hold.check.setChecked(checkMap.get(position));
}
原理就是,定义一个map集合,来保存当前checkbox的状态,然后设置。
已成功解决问题,2018年9月3日上午9:03分