ListView/RecyclerView的item中有进度条的处理
2016-08-06 11:10
1311 查看
之所以特意提出是有进度条的情况,是因为进度条刷新的频率非常高,如果是在进度刷新的时候调用notifyDataSetChanged或者notifyItemChanged方法虽然可以实现刷新,但是界面会频繁的闪烁!所以这个时候最好的办法就是拿到要刷新的item的对应的控件,比如要刷新的进度条的引用。
我的方法是这样的:以recyclerview为例。
给ViewHolder添加一个int类型的position属性,其实就是给ViewHolder一个标记、一个索引,方便我们通过这个position来找到对应的ViewHolder对象。在adapter中维护个map,其中key是adapter中的position,value是holder的position,这样我们就能根据我们要刷新的item的position拿到ViewHolder对象对应的position。同时我们将所有的ViewHolder保存到一个集合中,一般adapter创建的viewholder的数量是同一时间最多显示的item个数加2,然后就是复用,这个想必大家都很清楚。当我们需要刷新某个position对应的item的进度条的时候,我们就可以拿到该position上的进度条的引用,然后直接更新,而不需要刷新整个item!代码如下:
我的方法是这样的:以recyclerview为例。
给ViewHolder添加一个int类型的position属性,其实就是给ViewHolder一个标记、一个索引,方便我们通过这个position来找到对应的ViewHolder对象。在adapter中维护个map,其中key是adapter中的position,value是holder的position,这样我们就能根据我们要刷新的item的position拿到ViewHolder对象对应的position。同时我们将所有的ViewHolder保存到一个集合中,一般adapter创建的viewholder的数量是同一时间最多显示的item个数加2,然后就是复用,这个想必大家都很清楚。当我们需要刷新某个position对应的item的进度条的时候,我们就可以拿到该position上的进度条的引用,然后直接更新,而不需要刷新整个item!代码如下:
class MyAdapter extends RecyclerView.Adapter<MyViewHolder> { HashMap<Integer, Integer> map = new HashMap<>(); ArrayList<MyViewHolder> mHolders = new ArrayList<>(); int count = 0; @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { count++; MyViewHolder myViewHolder = new MyViewHolder(View.inflate(getApplicationContext(), R.layout .recycler_item_2, null), count); mHolders.add(myViewHolder); return myViewHolder; } @Override public void onBindViewHolder(MyViewHolder holder, int position) { map.put(position, holder.position); holder.mTvIndex.setText(mList.get(position)); holder.mPb.setProgress(15); } @Override public int getItemCount() { return mList.size(); } }
相关文章推荐
- RecyclerView,ListView等会用到Adapter并复用Item时already has a parent的错误
- 精通RecyclerView:打造ListView、GridView、瀑布流;学会添加分割线、 添加删除动画 、Item点击事件
- RecyclerView的Item和Item内的控件点击处理
- ListView的item点击事件及item中子view的点击事件冲突处理方法和思路
- Listview、RecyclerView中的item中包含可以点击的控件,点击冲突解决办法
- Android购物车的实现,仿淘宝天猫京东等APP。处理RecyclerView或listview中的选中事件;
- 纵向的ListView或RecyclerView点击都可以让item跳到中间(类似TabLayout的滑动)
- RecyclerView.java源码动画分析,每个itemView的动画交给了 DefaultItemAnimator 这个类进行处理
- Android XRecyclerView最简单的item点击事件处理
- Android RecyclerView ListView 获取不到Item点击事件
- 在listview的item中使用其他通过适配器传值的控件如Recyclerview不显示的问题
- ListView实现item的卡片效果(不使用RecyclerView+CardView)
- databinding listview/RecyclerView的item布局文件中如何加载res中的图片
- 一个 ScrollView 里面包含 viewpager 嵌套 listview 或 RecyclerView 极少代码实现的流畅滑动效果 处理一个两层滑动 view 的自定义布局,以最少的代码实现,
- Recyclerview或Listview实时刷新,item点击事件失效的解决方法
- Android自定义控件:左滑删除itemRecyclerView,ListView,GrdiView通配,教你如何最快最轻松定制,而不是复制粘贴!
- Android TV RecyclerView 焦点处理及获取焦点的Item保持在中间
- RecyclerView 更新单个item时,闪烁问题的处理
- ListView、recyclerView的itemView布局注意事项
- Recyclerview的Item支持可点击可长安类似ListViewOnItemClickListener