ListView的bug解决,如果有checkbox的话,选中的值在翻屏时会跳来跳去

始化数据
data = new ArrayList<HashMap>();  
for (int i = 0; i < 20; i++) {  
    map = new HashMap();  
    map.put("title", "title-->" + i);  
    map.put("content", "content--" + i);  
    data.add(map);  
}  
设置ListView
adapter = new MyAdapter(CheckList.this, data);  
mListView.setAdapter(adapter);  
// 为listview的子项添加点击事件,position就是原来的arg2   
mListView.setOnItemClickListener(new OnItemClickListener() {  
    @Override  
    public void onItemClick(AdapterView<?> parent, View view,  
            int position, long id) {  
        System.out.println("您所点击的行号是:" + position);  
    }  
});  
定义我们需要的adapter
int count = scroll_num;  
Context mContext;  
ArrayList<HashMap> mData;  
LayoutInflater mInflater;  
  
public MyAdapter(Context context, ArrayList<HashMap> data) {  
    this.mContext = context;  
    this.mData = data;  
    mInflater = (LayoutInflater) mContext  
            .getSystemService(mContext.LAYOUT_INFLATER_SERVICE);  
    if (count > mData.size()) {  
        count = mData.size();  
    }  
    isSelected = new HashMap<Integer, Boolean>();  
    for (int i = 0; i < data.size(); i++) {  
        isSelected.put(i, false);  
    }  
}  
  
@Override  
public int getCount() {  
    return mData.size();  
}  
  
@Override  
public Object getItem(int position) {  
    return position;  
}  
  
@Override  
public long getItemId(int position) {  
    return position;  
}  
  
@Override  
public View getView(final int position, View convertView,  
        ViewGroup parent) {  
    if (convertView == null) {  
        convertView = mInflater.inflate(R.layout.item_listview, null);  
        holder = new ViewHolder();  
        holder.content = (TextView) convertView  
                .findViewById(R.id.item_listview_content);  
        holder.checkBox = (CheckBox) convertView  
                .findViewById(R.id.item_listview_checkbox);  
        convertView.setTag(holder);  
    } else {  
        holder = (ViewHolder) convertView.getTag();  
    }  
  
    holder.content  
            .setText(data.get(position).get("content").toString());  
    holder.checkBox.setChecked(isSelected.get(position));  
    holder.checkBox.setOnClickListener(new OnClickListener() {  
        @Override  
        public void onClick(View v) {  
            if (isSelected.get(position)) {  
                isSelected.put(position, false);  
            } else {  
                isSelected.put(position, true);  
            }  
            notifyDataSetChanged();  
        }  
    });  
  
    return convertView;  
}  
最后再定义一个xml的adapter



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值