ListView、RecyclerView CheckBox 单选实现,以及RecyclerView异步加载网络图片
来源:互联网 发布:淘宝店抽成 编辑:程序博客网 时间:2024/05/16 08:43
一般来讲,实现单选的方法都是使用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,那就这样吧。
1 0
- ListView、RecyclerView CheckBox 单选实现,以及RecyclerView异步加载网络图片
- RecyclerView之CheckBox实现单选效果
- RecyclerView、ListView实现单选列表
- RecyclerView中使用CheckBox勾选混乱问题解决以及单选功能的实现
- MVP实现用Retrofit请求网络数据Fresco加载图片,Recyclerview CheckBox显示并实现全选删除
- recyclerview+okhttp+glide实现网络请求加载图片列表
- RecyclerView异步加载图片乱序问题
- RecyclerView+CheckBox 实现横向的图片选择
- RecyclerView、ListView实现单选列表的优雅之路
- RecyclerView、ListView实现单选列表的优雅之路
- RecyclerView、ListView实现单选列表的优雅之路.
- 【Android】Glide结合Recyclerview(也适用于Listview)实现列表滑动的时候图片不加载,滑动停止的时候加载(已修正Listview部分以及排版)
- Glide结合Recyclerview(也适用于Listview)实现列表滑动的时候图片不加载,滑动停止的时候加载(已修正Listview部分以及排版)
- Android---RecyclerView网络请求图片加载
- RecyclerView中,图片加载重用问题,异步加载图片
- RecyclerView实现checkBox
- RecyclerView实现单选模式
- listview 异步加载 网络图片
- LeetCode解题笔记(2)
- Listener之ServletContextAttributeListener
- (二)创建型模式--工厂模式
- 在android中使用rxjava rxAndroid
- android Handler 源码解析
- ListView、RecyclerView CheckBox 单选实现,以及RecyclerView异步加载网络图片
- 好的测试实践——软件测试的尽早介入
- 我理解的云桌面(或桌面云)
- python中的操作符
- IOS 学习之一基础
- NBA篮球运动员大数据分析决策支持系统
- 为啥本地搭建了DVWA用burpsuite却抓不到包?
- C程序设计学习笔记(完结)
- iptables