关于recyclerview的使用比较简单,这里讲下recyclerview的item有个更新下载进度百分比的textview。我们要解决两个问题:1、这个跟新百分比的textview的局部刷新;2、recyclerview滑动时的复用问题。
先贴上recyclerview的adapter的三个重要方法:
@Override
publicRecyclerView.ViewHolderonCreateViewHolder(ViewGroup parent, intviewType) {}
创建viewholder的方法,关于viewholder的个数是一个屏幕能放下tiem总数量+2;
@Override
public voidonBindViewHolder(RecyclerView.ViewHolder holder, final intposition) {}
item条目可见时,调用此方法,我们需要给holder里面的各个view设置数据和状态;
@Override
public intgetItemCount() {}
item的总数量
先说进度条的单独刷新:我们需要拿到该条目的view,view绑定在holder上面。可通过下面这个api拿到position对应的holder
publicViewHolderfindViewHolderForAdapterPosition(intposition) {}
拿到holder后,就可以刷新对应positon的进度条了
上面进度条可以单独刷新,如果一滑动,就会看到很揪心的结果,复用错乱。不该更新的更新了,原有更新的突然没了。这个也可以理解,人家就只创建了这么多holder,我们拿到的holder鬼知道是哪个。最后想了个方法,如果我们一个item一个holder应该能解决这个复用问题(不过这样牺牲了性能)。最后通过这个方法
@Override
public intgetItemViewType(intposition) {return position;}
这样实现一个item一个holder。(ps:这里滑动的时候,需要有一个集合储存对应id的进度,并且在绑定数据时,展示)
以上是自己的想法,写了个demo好像不错,欢迎各位留下自己的意见或者建议。
当然还有其他的方法:比如定时刷新单个item,或者干脆整个页面一起刷新。