ListView 数据错乱问题的解决(CheckBox)
2016-01-15 16:28
435 查看
1.创建实体类时,多添加一条Boolean Checked
2. tag 运用
2. tag 运用
package com.smarttrans.phone.adapter; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.LinearLayout; import android.widget.TextView; import com.smarttrans.phone.R; import com.smarttrans.phone.bean.BrandItemInfo; import java.util.LinkedList; import java.util.List; /** * Created by ccj on 2015/12/29. */ public class DiaLogAdapter extends BaseAdapter { private LinkedList<String> selectedBrands; private Context context; private List<BrandItemInfo> brandInfoList; private final String TAG = "disorderlist"; public DiaLogAdapter(Context context, List<BrandItemInfo> list) { this.context = context; brandInfoList = list; selectedBrands = new LinkedList<>(); } @Override public int getCount() { return brandInfoList.size(); } @Override public Object getItem(int i) { return null != brandInfoList ? brandInfoList.get(i) : null; } @Override public long getItemId(int i) { return i; } private class ViewHolder { private TextView brandChNameTv; private CheckBox followCheckBox; } @Override public View getView(int i, View view, ViewGroup viewGroup) { ViewHolder viewHolder = null; BrandItemInfo brandItemInfo = (BrandItemInfo) getItem(i); if (null == view) { LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); view = inflater.inflate(R.layout.dialog_list_item, null); viewHolder = new ViewHolder(); LinearLayout linearLayout = (LinearLayout) view.findViewById(R.id.ll_list_item); viewHolder.brandChNameTv = (TextView) view.findViewById(R.id.tv_item); viewHolder.followCheckBox = (CheckBox) view.findViewById(R.id.cb_item); final ViewHolder finalViewHolder1 = viewHolder; final ViewHolder finalViewHolder = viewHolder; viewHolder.followCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean b) { BrandItemInfo info = (BrandItemInfo) finalViewHolder.followCheckBox.getTag();//取出缓存中的数据,设定他的选中状态 info.setSelected(compoundButton.isChecked()); } }); view.setTag(viewHolder);//将viewholder给Tag } else { viewHolder = (ViewHolder) view.getTag(); } viewHolder.followCheckBox.setTag(brandItemInfo);//!!!!将项 的对象保存到 CheckBox的tag中viewHolder.brandChNameTv.setText(brandItemInfo.getBrandChName()); //最后设定 view中的数据 viewHolder.followCheckBox.setChecked(brandItemInfo.isSelected()); return view; } }
</pre><pre>
相关文章推荐
- 数据库范式
- Button添加红色的数字圆圈
- Linux基础入门学习笔记二
- Swift基础学习
- 《JavaScript启示录》学习笔记——第4章 Function()
- PHP----生成包含验证码的GIF图片
- intel 保修 由于受潮 CPU 主板 内存 硬盘 全部坏了
- MTU和MSS
- Android APP 引导页实现-第一次应用进入时加载
- js之放大镜
- 蓝桥杯入门训练 Fibonacci数列
- 续 codeforces 613B Skills
- JQuery经典例子:可拉伸菜单
- OpenGLES2.0着色器语言glsl
- 利用函数指针对数组进行排序
- C++ Primer 5th Chapter 8 学习笔记
- WebRequest设置Header应该放最前面
- 【SQL server】安装和配置
- C++运行时获取类型信息的type_info类与bad_typeid异常
- 【转】Linux服务器安全的25个小知识