android listview中自訂配接器和複選框

來源:互聯網
上載者:User

標籤:android   android開發   

下面的代碼中報錯了,代碼如下

@Overrideppublic View getView(final int position, final View convertView, final ViewGroup parent) {      final ViewHolder viewHolder;      View view = convertView;      if (view == null) {          view = LayoutInflater.from(mContext).inflate(R.layout.row, parent, false);          viewHolder = new ViewHolder();           viewHolder.textTitle = (TextView) view.findViewById(R.id.title);          viewHolder.checkBox = (CheckBox) view.findViewById(R.id.checkBox);           viewHolder.checkBox.setTag(position);          view.setTag(viewHolder);           viewHolder.imageView = (ImageView) view.findViewById(R.id.activity_googlecards_card_imageview);      } else {          viewHolder = (ViewHolder) view.getTag();          viewHolder.checkBox.getTag(position);      }       viewHolder.textTitle.setText(getItem(position).getTitle());       viewHolder.checkBox.setChecked(myIntegerArrayList.contains(position));      viewHolder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {          @Override          public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {              if (isChecked) {                  myIntegerArrayList.add(position);              } else {                  myIntegerArrayList.remove((Object) position);              }          }      });       return view;}}    private static class ViewHolder {      TextView textTitle;      CheckBox checkBox;}}


該複選框本身工作正常。位置正確添加到我的ArrayList,但如果(假設我選中的項目在位置1)我把listview滾動到底部,然後再滾回去,選中取消了....

 

處理方法

刪掉代碼viewHolder.checkBox.setTag(position); 
把 viewHolder.checkBox.getTag();放到  onCheckedChanged 中,你按照下面的代碼改動

@Overridepublic View getView(final int position, final View convertView, final ViewGroup parent) {      final ViewHolder viewHolder;      View view = convertView;      if (view == null) {          view = LayoutInflater.from(mContext).inflate(R.layout.row, parent, false);          viewHolder = new ViewHolder();           viewHolder.textTitle = (TextView) view.findViewById(R.id.title);          viewHolder.checkBox = (CheckBox) view.findViewById(R.id.checkBox);            view.setTag(viewHolder);           viewHolder.imageView = (ImageView) view.findViewById(R.id.activity_googlecards_card_imageview);      } else {          viewHolder = (ViewHolder) view.getTag();          viewHolder.checkBox.getTag(position);      }      viewHolder.checkBox.setTag(position);       viewHolder.textTitle.setText(getItem(position).getTitle());       viewHolder.checkBox.setChecked(myIntegerArrayList.contains(position));      viewHolder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {          @Override          public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {              if (isChecked) {                  myIntegerArrayList.add(viewHolder.checkBox.getTag());              } else {                  myIntegerArrayList.remove((Object) viewHolder.checkBox.getTag());              }          }      });       return view;}}


讓你刪掉 viewHolder.checkBox.setTag(position); 是為了 回收ListView,你需要報錯位置在tag中,並讓 onCheckedChanged 獲得到

添加viewHolder.checkBox.getTag() 也是同樣的原因


原文地址:http://www.itmmd.com/201411/119.html 
該文章由 萌萌的IT人 整理髮布,轉載須標明出處。

android listview中自訂配接器和複選框

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.