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

首頁 > 學院 > 開發設計 > 正文

ListView、RecyclerView CheckBox 單選實現,以及RecyclerView異步加載網絡圖片

2019-11-09 14:24:16
字體:
來源:轉載
供稿:網友

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

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

/** * 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;//實現單選  變量保存當前選中的position    public GalleryAdapter(Context context, List<BusListBean> datats, RecyclerView view) {        mContext = context;        mInflater = LayoutInflater.from(context);        mList = datats;        mRecyclerView = view;        //設置數據集時,找到默認選中的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);    }    /**     * 創建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;    }    /**     * 設置值     */    @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) {                //每次點擊選擇時,把看見的,看不見的的項目設置為非選擇狀態                ViewHolder holder = (ViewHolder) mRecyclerView.findViewHolderForLayoutPosition(mSelectedPos);                if (holder != null) {                    holder.cb_bus_change.setChecked(false);                } else {                    notifyItemChanged(mSelectedPos);                }                mList.get(mSelectedPos).setSelected(false);//上次選中的條目,設置為false;                //更新默認選中的position;                mSelectedPos = i;                //最后設置要選中的那項;                mList.get(mSelectedPos).setSelected(true);                viewHolder.cb_bus_change.setChecked(true);            }        });        //下邊是關于異步加載網絡圖片的方法,//        setHttpImage(bean.getBus_pic());        viewHolder.mImageView1.setImageDrawable(null);        final String httpUrl = bean.getBus_pic();        viewHolder.mImageView1.setTag(httpUrl);        //異步加載網絡圖片        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設置圖片,否則說明imageView已經被重用到其他item                if (httpUrl.equals(viewHolder.mImageView1.getTag())) {                    viewHolder.mImageView1.setImageBitmap((Bitmap) o);                }            }        }.execute();    }}

嘿,果然可以奧。哈哈哈

上面的代碼包含異步加載網絡圖片的方法,很簡單,自己看一下代碼應該都能看懂。

ok,那就這樣吧。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大方县| 吴旗县| 绥宁县| 灵宝市| 嵊泗县| 麦盖提县| 东阳市| 达尔| 抚松县| 宁都县| 武宣县| 建昌县| 宾阳县| 布拖县| 广宁县| 襄城县| 武强县| 贵德县| 蒙自县| 鄢陵县| 韶关市| 宜昌市| 兴义市| 哈巴河县| 远安县| 饶河县| 扶沟县| 兴文县| 科技| 辽宁省| 南汇区| 永宁县| 左云县| 平乐县| 呼伦贝尔市| 盐池县| 江华| 大新县| 屏东市| 江阴市| 健康|