多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > php開(kāi)源 > 綜合技術(shù) > Recycleview checkbox 復(fù)用出現(xiàn)混亂解決方法

Recycleview checkbox 復(fù)用出現(xiàn)混亂解決方法

來(lái)源:程序員人生   發(fā)布時(shí)間:2015-04-08 08:16:37 閱讀次數(shù):9568次

今天在做項(xiàng)目的1個(gè)我的收藏頁(yè)面時(shí)要實(shí)現(xiàn)這么1個(gè)效果:
這里寫(xiě)圖片描述
每一個(gè)item 前面都有1個(gè)checkbox ,主要布局是recycleview 。當(dāng)我們選中某項(xiàng)時(shí),繼續(xù)往下滑動(dòng)下面某個(gè)的checkbox也會(huì)變成選中狀態(tài)。
解決方法1比較暴力 viewHolder.setIsRecyclable(false);
這樣viewholder就不進(jìn)行復(fù)用,也不存在checkbox 混亂選中的問(wèn)題了,但是 你滑動(dòng)的時(shí)候卡的要死。

第2種就是在獲得到的bean中設(shè)置1個(gè)標(biāo)志位,但是需要修改bean 。雖然只是加個(gè)字段的問(wèn)題,但是不建議。

第3種就是用個(gè)輔助list記錄選中的item. 這還不夠,還要配合viewholder的settag().

1.在綁定view的時(shí)候
viewHolder.checkBox.setTag(new Integer(position));//設(shè)置tag 否則劃回來(lái)時(shí)選中消失

    if (checkPositionlist != null) {
        ((MyViewHolder) holder).checkBox.setChecked((checkPositionlist.contains(new Integer(position)) ? true : false));
    } else {
        ((MyViewHolder) holder).checkBox.setChecked(false);
    }

2.選中監(jiān)聽(tīng)事件:

viewHolder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { MyCollectionBaseBean baseBean = data.getFavoritesList().get(position); if (isChecked) { //Log.e("fangchao 1", viewHolder.checkBox.getTag() + ""); if (!checkPositionlist.contains(viewHolder.checkBox.getTag())) {//這句要有 ,否則不復(fù)用了,但是你再滑動(dòng)回去的時(shí)候,都成了為選中。這是由于你的item滑出可視范圍時(shí),就會(huì)觸發(fā)oncheckchange事件,所以用第1步綁定的tag進(jìn)行2次判斷。避免選中的丟失 checkeddata.add(baseBean); checkPositionlist.add(new Integer(position)); } } else { //Log.e("fangchao 2", viewHolder.checkBox.getTag() + ""); if (checkPositionlist.contains(viewHolder.checkBox.getTag()))//這句同上,2次判斷{ checkeddata.remove(baseBean); checkPositionlist.remove(new Integer(position)); } } } });

完全代碼,自己摘著看:

/** * Created By Fangchao On 2015/3/5 */ public class CollectionAdapter extends FooterAdapter { private MyCollectionListBean data;// 元數(shù)據(jù) private List<MyCollectionBaseBean> checkeddata = new ArrayList<>();// 選中的數(shù)據(jù) private ImageLoader mImageLoader; private List<Integer> checkPositionlist; public CollectionAdapter(MyCollectionListBean data) { this.data = data; mImageLoader = new ImageLoader(MyApplication.getInstance() .getRequestQueue(), BitmapCache.getInstance()); checkPositionlist = new ArrayList<>(); } public class MyViewHolder extends RecyclerView.ViewHolder { public TextView txt_onsale, txt_mj, txt_present, goodsname, goods_describe; public TextView price, mark_price, commentsnums; CheckBox checkBox; NetworkImageView goods_img; public View v; public MyViewHolder(View v) { super(v); this.v = v; txt_onsale = (TextView) v.findViewById(R.id.txt_onsale); txt_mj = (TextView) v.findViewById(R.id.txt_mj); txt_present = (TextView) v.findViewById(R.id.txt_present); goods_describe = (TextView) v.findViewById(R.id.tv_production_describ); goodsname = (TextView) v.findViewById(R.id.tv_goods_name); price = (TextView) v.findViewById(R.id.tv_goods_price); mark_price = (TextView) v.findViewById(R.id.tv_goods_markprice); commentsnums = (TextView) v.findViewById(R.id.tv_goods_commentsnums); checkBox = (CheckBox) v.findViewById(R.id.collection_cb); goods_img = (NetworkImageView) v.findViewById(R.id.mycollection_item_image); } } @Override public boolean useFooter() { return true; } @Override public RecyclerView.ViewHolder onCreateContentItemViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.item_collection, parent, false); MyViewHolder vh = new MyViewHolder(v); return vh; } @Override public void onBindContentItemView(RecyclerView.ViewHolder holder, final int position) { MyViewHolder viewHolder = (MyViewHolder) holder; // viewHolder.setIsRecyclable(false); viewHolder.goodsname.setText(data.getFavoritesList().get(position).getGoods().getGoodsName()); if (StringUtils.isBlank(data.getFavoritesList().get(position).getGoods().getGoodsSlogan())) { viewHolder.goods_describe.setVisibility(View.GONE); } else { viewHolder.goods_describe.setVisibility(View.VISIBLE); viewHolder.goods_describe.setText(data.getFavoritesList().get(position).getGoods().getGoodsSlogan()); } viewHolder.price.setText(PriceTools.formatStr(data.getFavoritesList().get(position).getGoods().getShopPrice())); viewHolder.price.setTextColor(Color.parseColor("#E5004B")); viewHolder.mark_price.setText(PriceTools.formatStr(data.getFavoritesList().get(position).getGoods().getMarketPrice())); viewHolder.mark_price.setBackgroundResource(0); viewHolder.mark_price.getPaint().setFlags( Paint.STRIKE_THRU_TEXT_FLAG | Paint.ANTI_ALIAS_FLAG); // 設(shè)置中劃線并加清晰 viewHolder.commentsnums.setText(data.getFavoritesList().get(position).getGoods().getCommentCount()); viewHolder.checkBox.setTag(new Integer(position));//設(shè)置tag 否則劃回來(lái)時(shí)選中消失 //checkbox 復(fù)用問(wèn)題 if (checkPositionlist != null) { ((MyViewHolder) holder).checkBox.setChecked((checkPositionlist.contains(new Integer(position)) ? true : false)); } else { ((MyViewHolder) holder).checkBox.setChecked(false); } //Log.e("ffff",position+""); viewHolder.goods_img.setDefaultImageResId(R.drawable.item_default_img); viewHolder.goods_img.setErrorImageResId(R.drawable.item_default_img_err); viewHolder.goods_img.setImageUrl(data.getFavoritesList().get(position).getGoods().getImgFile(), mImageLoader); if (data.getFavoritesList().get(position).getGoods().getIsOnSale().equals("false")) { //下架 viewHolder.price.setText("本商品已下架"); viewHolder.price.setTextColor(Color.GRAY); viewHolder.mark_price.setText(""); } else if (data.getFavoritesList().get(position).getGoods().isIsNoStock()) { //缺貨 viewHolder.mark_price.setBackgroundResource(R.drawable.ticket_is_outof_date_bg); viewHolder.mark_price.setText(" 缺貨 "); viewHolder.price.setTextColor(Color.GRAY); viewHolder.mark_price.getPaint().setFlags(0); } //cb 的選中事件 onchecked(viewHolder, position); } private void onchecked(final MyViewHolder viewHolder, final int position) { viewHolder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { MyCollectionBaseBean baseBean = data.getFavoritesList().get(position); if (isChecked) { //Log.e("fcccc 1", viewHolder.checkBox.getTag() + ""); if (!checkPositionlist.contains(viewHolder.checkBox.getTag())) { checkeddata.add(baseBean); checkPositionlist.add(new Integer(position)); } } else { //Log.e("fcccc 2", viewHolder.checkBox.getTag() + ""); if (checkPositionlist.contains(viewHolder.checkBox.getTag())) { checkeddata.remove(baseBean); checkPositionlist.remove(new Integer(position)); } } } }); } @Override public int getContentItemCount() { if (data != null) return data.getFavoritesList().size(); else return 0; } @Override public int getContentItemType(int position) { return 0; } public void getdata(MycheckListener listener) { listener.getcheckeddata(checkeddata); } public interface MycheckListener { void getcheckeddata(List<MyCollectionBaseBean> listBean); } }
生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 麻豆日韩区久久综合 | 久久精品国产久精国产80cm | 国产人成精品综合欧美成人 | 亚洲欧美一区二区三区蜜芽 | 国产午夜精品一区二区三区不卡 | 亚洲国产成人精品一区二区三区 | 亚洲欧美视频网站 | www.yw尤物| 香蕉国产成版人视频在线观看 | 樱花aⅴ一区二区三区四区 影视精品网站入口 | 牛和人交videos欧美 | 成人在线一区二区 | 亚洲日韩欧美一区二区在线 | 午夜久久精品 | 高清性欧美 | 一区二区三区免费视频播放器 | 亚洲一区二区三区免费 | 69热视频在线观看 | 精品国产精品久久一区免费式 | 久久亚洲欧美成人精品 | 欧美特级午夜一区二区三区 | 手机看片国产高清 | 国产高清在线视频一区二区三区 | 伊人成综合网 | 欧美乱妇高清无乱码亚洲欧美 | 在线视频亚洲欧美 | 日本综合欧美一区二区三区 | 羞羞动漫网页 | 亚洲黄色影片 | 乱码中文在线观看 | 成人看片毛片免费播放器 | 欧美一区二区视频三区 | 最近中文字幕视频完整 | 久久最新| 国产第一页在线播放 | bbbbbxxxxx肥胖| 亚洲精品欧美精品 | 亚洲精品人成无码中文毛片 | 亚洲码欧美码一区二区三区 | 九九涩| riav久久中文一区二区 |