您的位置:首页 > 移动开发 > Android开发

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!代码如下:

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();
}
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐