国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

ListView、RecyclerView CheckBox 單選實(shí)現(xiàn),以及RecyclerView異步加載網(wǎng)絡(luò)圖片

2019-11-09 15:30:37
字體:
供稿:網(wǎng)友

一般來講,實(shí)現(xiàn)單選的方法都是使用RadioGroup,但是有時候,數(shù)據(jù)很多的時候,往往會很麻煩,要寫很多RadioButton,這就蛋疼了。所以就想著用ListView或RecyclerView + CheckBox來處理,應(yīng)該是個不錯的想法。

那么問題就來了,RecyclerView里面怎么才能實(shí)現(xiàn)單選呢。我們都知道,CheckBox是可以獨(dú)立的,多選的,這就糾結(jié)了。于是就想著,要是每一次選擇,都將上次選擇的取消掉,就可以了。然后就索性,每次選擇之前,先循環(huán)遍歷,將所有的項目設(shè)置為false,然后在設(shè)置自己要選中的項目,這樣應(yīng)該是個不錯的想法,下面我們就來看看怎么實(shí)現(xiàn)的吧,簡答粗暴的方法----上代碼:

/** * Created by zhong on 2017/1/10. */public class GalleryAdapter extends RecyclerView.Adapter<GalleryAdapter.ViewHolder> {    PRivate Context mContext;    private LayoutInflater mInflater;    private List<BusListBean> mList;    private RecyclerView mRecyclerView;    private int mSelectedPos = 0;//實(shí)現(xiàn)單選  變量保存當(dāng)前選中的position    public GalleryAdapter(Context context, List<BusListBean> datats, RecyclerView view) {        mContext = context;        mInflater = LayoutInflater.from(context);        mList = datats;        mRecyclerView = view;        //設(shè)置數(shù)據(jù)集時,找到默認(rèn)選中的position        for (int a = 0; a < mList.size(); a++) {            if (mList.get(a).isSelected()) {                mSelectedPos = a;            }        }    }    public static class ViewHolder extends RecyclerView.ViewHolder {        private TextView mSeat;        private TextView mLicence;        private LinearLayout rootView;        private CheckBox cb_bus_change;        private RoundedImageView mImageView;        private RoundedImageView mImageView1;        public ViewHolder(View arg0) {            super(arg0);            rootView = (LinearLayout) arg0.findViewById(R.id.rootView);            cb_bus_change = (CheckBox) arg0.findViewById(R.id.cb_bus_change);            mImageView = (RoundedImageView) arg0.findViewById(R.id.riv_outside);            mImageView1 = (RoundedImageView) arg0.findViewById(R.id.imageView1);            mSeat = (TextView) arg0.findViewById(R.id.seat);            mLicence = (TextView) arg0.findViewById(R.id.licence);        }    }    @Override    public int getItemCount() {        return mList.size();    }    @Override    public void onViewRecycled(ViewHolder holder) {        super.onViewRecycled(holder);    }    /**     * 創(chuàng)建ViewHolder     */    @Override    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {        View view = mInflater.inflate(R.layout.activity_order_change_bus_item,                viewGroup, false);        ViewHolder viewHolder = new ViewHolder(view);        return viewHolder;    }    /**     * 設(shè)置值     */    @Override    public void onBindViewHolder(final ViewHolder viewHolder, final int i) {//        final String new_bus_id = bean.getId();        final BusListBean bean = mList.get(i);        viewHolder.cb_bus_change.setChecked(bean.isSelected());        viewHolder.rootView.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //每次點(diǎn)擊選擇時,把看見的,看不見的的項目設(shè)置為非選擇狀態(tài)                ViewHolder holder = (ViewHolder) mRecyclerView.findViewHolderForLayoutPosition(mSelectedPos);                if (holder != null) {                    holder.cb_bus_change.setChecked(false);                } else {                    notifyItemChanged(mSelectedPos);                }                mList.get(mSelectedPos).setSelected(false);//上次選中的條目,設(shè)置為false;                //更新默認(rèn)選中的position;                mSelectedPos = i;                //最后設(shè)置要選中的那項;                mList.get(mSelectedPos).setSelected(true);                viewHolder.cb_bus_change.setChecked(true);            }        });        //下邊是關(guān)于異步加載網(wǎng)絡(luò)圖片的方法,//        setHttpImage(bean.getBus_pic());        viewHolder.mImageView1.setImageDrawable(null);        final String httpUrl = bean.getBus_pic();        viewHolder.mImageView1.setTag(httpUrl);        //異步加載網(wǎng)絡(luò)圖片        new AsyncTask() {            @Override            protected Object doInBackground(Object[] params) {                try {                    URL picUrl = new URL(httpUrl);                    Bitmap bitmap = BitmapFactory.decodeStream(picUrl.openStream());                    return bitmap;                } catch (Exception e) {                    e.printStackTrace();                }                return null;            }            @Override            protected void onPostExecute(Object o) {                super.onPostExecute(o);                //加載完畢后判斷該imageView等待的圖片url是不是加載完畢的這張                //如果是則為imageView設(shè)置圖片,否則說明imageView已經(jīng)被重用到其他item                if (httpUrl.equals(viewHolder.mImageView1.getTag())) {                    viewHolder.mImageView1.setImageBitmap((Bitmap) o);                }            }        }.execute();    }}

嘿,果然可以奧。哈哈哈

上面的代碼包含異步加載網(wǎng)絡(luò)圖片的方法,很簡單,自己看一下代碼應(yīng)該都能看懂。

ok,那就這樣吧。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 开化县| 织金县| 宜昌市| 平邑县| 海丰县| 马边| 牡丹江市| 闽侯县| 黄山市| 潮安县| 阜新市| 锦州市| 湘潭县| 徐闻县| 大化| 吴桥县| 同江市| 延庆县| 精河县| 正蓝旗| 永宁县| 云龙县| 乡城县| 明光市| 修文县| 武清区| 临漳县| 调兵山市| 靖州| 皋兰县| 怀柔区| 松溪县| 乌兰察布市| 吉木乃县| 余干县| 卢氏县| 鄂温| 嵊泗县| 肇源县| 新邵县| 西峡县|