使用带对象或不带对象的notifyItemChanged不会调用onBindView,而是稍作滚动(不获取屏幕视图并进入)。它的工作原理是:
@Override
public void onClick(View view) {
if(view.getTag() instanceof MediaEntity){
final MediaEntity entity = (MediaEntity) view.getTag();
if(isInSelected(entity.getPath())){
selected.remove(entity.getPath());
}else{
selected.add(entity.getPath());
}
notifyItemChanged(getPosition(entity.getPath()),new boolean[]{true});
}
}
@Override
public void onBindViewHolder(@NonNull MediaViewholder holder, int position, @NonNull List<Object> payloads) {
if(!payloads.isEmpty()){
holder.checkView.setVisibility(holder.checkView.getVisibility() == View.VISIBLE ? View.GONE : View.VISIBLE);
}else{
//...
holder.populateOnBind(activity,paths.get(position),isVideo,isCheck);
}
}
看起来问题是在第一次滚动之后发生的,所有显示的项目都可以正常工作。但是在第一次滚动之后会发生这种情况。