日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

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

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

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

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

第2種就是在獲得到的bean中設置1個標志位,但是需要修改bean 。雖然只是加個字段的問題,但是不建議。

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

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

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

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

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())) {//這句要有 ,否則不復用了,但是你再滑動回去的時候,都成了為選中。這是由于你的item滑出可視范圍時,就會觸發(fā)oncheckchange事件,所以用第1步綁定的tag進行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); // 設置中劃線并加清晰 viewHolder.commentsnums.setText(data.getFavoritesList().get(position).getGoods().getCommentCount()); viewHolder.checkBox.setTag(new Integer(position));//設置tag 否則劃回來時選中消失 //checkbox 復用問題 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)辛苦
如果您覺得本網(wǎng)站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 成人自拍偷拍 | 少妇一级淫片免费看 | 黄网站视频在线观看 | 欧美中文在线观看 | 精品国产一区二区三区久久久久久 | 国产精品久久久久久久免费软件 | www久久 | 色在线视频 | 99精品国产一区二区三区 | 国产精品视频一区二区三区不卡 | 看片地址 | 国产精品网站视频 | 国产成人一区 | 国产骚片| 黄色激情视频网站 | 午夜精品久久久久久不卡av | 在线视频中文字幕 | 国产成人一区二区三区 | 一级黄色在线播放 | 在线观看的av网站 | 免费看成人 | 久久99久久99精品免观看粉嫩 | 99只有精品 | 成人国产精品 | av片免费 | 精品国产91乱码一区二区三区 | 久久久精品一区二区 | 91精品国产综合久久小美女 | 亚洲精品久久久蜜桃 | 免费精品国产的网站免费观看 | 久久成人国产精品入口 | 亚洲2020天天堂在线观看 | 欧美精品久久久 | 91亚洲精品一区二区 | 亚洲欧美第一页 | 国产九色| 精品少妇一区二区三区视频免付费 | 日本精a在线观看 | 欧美理论视频 | 日韩在线视频免费 | 正在播放国产精品 |