Android 利用RecyclerView.Adapter刷新列表中的单个view问题
首先使用RecyclerView的adapter继承:RecyclerView.Adapter
1 public class OrderListAdapter extends RecyclerView.Adapter { 2 //TODO 3 }
2、创建ViewHolder 需要继承
class ViewHolder extends RecyclerView.ViewHolder{ //TODO 声明view public ViewHolder(View convertView) { super(convertView); //TODO 初始化view } }
通过onCreateViewHolder 返回好创建的布局文件:
@Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View inflate = LayoutInflater.from(mContext).inflate(R.layout.xxxx, parent, false); return new ViewHolder(inflate); }
接下来重点来了:
通过onBindViewHolder 带List payloads 参数的方法来区分是现实列表中的同一位置的view的刷新:
@Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position, List payloads) { if (null == payloads || payloads.size() < 1) { onBindViewHolder(holder, position); } else if (mIsActivityTop) { for (Object payload : payloads) { // 刷新倒计时 if (payload instanceof Integer && ((int) payload) == UPDATE_COUNT_DOWN_TIME) { ((ViewHolder) holder).tv_time.setText("刷新了")); } } } }
传入的整型:
1 private final static int UPDATE_COUNT_DOWN_TIME = 1;
而payloads可以List,这样就可以区分刷新不同区域的view了.
而上面的调用的onBindViewHolder(holder, position),就是重写的onBindViewHolder(holder, position)的方法了:
@Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { //TODO 写绑定view 的逻辑以及显示 }
对于什么时候会调用到onBindViewHolder(holder, position, payloads)的方法:
当你写倒计时的时候:(倒计时是用rxjava写的,在onNext的时候)
Subscription adSkipTimer Observable.interval(1, TimeUnit.SECONDS) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<Long>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(Long aLong) { notifyItemRangeChanged(0, getItemCount(), UPDATE_COUNT_DOWN_TIME); } } });
通过 notifyItemRangeChanged 来调用onBindViewHolder(holder, position, payloads)的方法。
通过notifyDataSetChanged 来调用onBindViewHolder(holder, position)的方法。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步