RecyclerView性能优化是老生常谈了。今天我想到一种简单的方法,能有效提高滑动的流畅度。
有一种经典的做法是,当RecyclerView滑动时,onBindViewHolder规避掉耗时操作,显示一些默认内容。当RecyclerView停止滑动时,调用notifyDataSetChanged,强制bind一下ViewHolder,从而显示实际内容。
这种方法的缺点是,只有RecyclerView滑动停下来了,ViewHolder才会显示真正的内容。滑动末期,速度其实已经很慢了,ViewHolder却还没显示实际内容,用户体验极差,实在急死个人。
我想到的办法是,在onBindViewHolder时,让ViewHolder显示默认内容,并将显示实际内容的方法postDelay。
当RecyclerView滚动很快时,上一次postDelay的东西会在onViewDetachedFromWindow或者onBindViewHolder时被取消掉,耗时操作永远不会被执行。
当RecyclerView滚动很慢时,postDelay里的东西会正常执行,ViewHolder会显示真正的内容。
public class MyRecyclerviewAdapter extends RecyclerView.Adapter<MyRecyclerviewAdapter.MyViewHolder> {
public MyRecyclerviewAdapter() {
}
@NonNull
@Override
public MyRecyclerviewAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup