android – CustomAdapter中的ListView Checkbox问题

朋友们,

我正在使用以下代码来检查/取消选中listview中的复选框

public AdapterBank(Context context,List<Bank> list,ListView lst) {
     mInflater = LayoutInflater.from(context);
      this.context = context;
      listview = lst;
      banks= list;
    }

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

          ViewHolder holder;

          if (convertView == null) {
            convertView = mInflater.inflate(R.layout.list_banks, null);
            holder = new ViewHolder();
            holder.bankName = (TextView) convertView.findViewById(R.id.bankName);
            holder.bankIcon = (ImageView) convertView.findViewById(R.id.bankIcon);
            holder.checkBox = (CheckBox) convertView.findViewById(R.id.checkBox);
            convertView.setTag(holder);



          } else {
            holder = (ViewHolder) convertView.getTag();
          }

          Bank bank = getItem(position);

          holder.checkBox.setonCheckedchangelistener(new OnCheckedchangelistener() {

                @Override
                public void onCheckedChanged(CompoundButton checkBoxView, boolean isChecked) {
                    banks.get(position).setSelected(isChecked);
                    //Toast.makeText(context, "" + position, Toast.LENGTH_LONG).show();
                }
            });


          if(bank.isSelected())
            {
                holder.checkBox.setChecked(true);
            }else
            {
                holder.checkBox.setChecked(false);
            }

当我选中任何复选框并滚动它.选中复选框不再检查.
任何人指导我在这做什么错?

解决方法:

您可以尝试使用静态侦听器(可能无法纠正您的错误,但肯定会降低您正在创建的“临时”对象的数量):

public View getView(final int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.list_banks, null);
        holder = new ViewHolder();
        holder.bankName = (TextView) convertView.findViewById(R.id.bankName);
        holder.bankIcon = (ImageView) convertView.findViewById(R.id.bankIcon);
        holder.checkBox = (CheckBox) convertView.findViewById(R.id.checkBox);
        holder.checkBox.setonCheckedchangelistener(checkListener);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    Bank bank = getItem(position);
    holder.checkBox.setTag(bank);
    holder.checkBox.setChecked(bank.isSelected());

    return convertView;
}

private OnCheckedchangelistener checkListener = new OnCheckedchangelistener() {
   @Override
   public void onCheckedChanged(CompoundButton checkBoxView, boolean isChecked) {
     Bank b = (Bank) checkBoxView.getTag();
     b.setSelected(isChecked);
   }
});

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...