定制企业网站,wordpress 后台点击没反应,试客网站建设,福建住房和城乡建设厅网站RecycleView 和 ListView对比: 使用方法上 ListView:继承重写 BaseAdapter,自定义 ViewHolder 与 converView优化。
RecyclerView: 继承重写 RecyclerView.Adapter 与 RecyclerView.ViewHolder。设置 LayoutManager 来展示不同的布局样式
ViewHolder的编写规范化,ListVie…RecycleView 和 ListView对比: 使用方法上 ListView:继承重写 BaseAdapter,自定义 ViewHolder 与 converView优化。
RecyclerView: 继承重写 RecyclerView.Adapter 与 RecyclerView.ViewHolder。设置 LayoutManager 来展示不同的布局样式
ViewHolder的编写规范化,ListView是需要自己定义的,而RecyclerView是规范好的; RecyclerView复用item全部搞定,不需要像ListView那样setTag()与getTag(); RecyclerView多了一些LayoutManager工作,但实现了布局效果多样化; 2. 动画api 在RecyclerView中自带动画效果,例如:notifyItemChanged(), notifyDataInserted(), notifyItemMoved()等等;同时内置有许多动画API,如果需要自定义动画效果,可以通过实现(RecyclerView.ItemAnimator类)完成自定义动画效果,然后调用RecyclerView.setItemAnimator(); 但是ListView并没有实现动画效果,需要在Adapter自己自定义; 3. 缓存区别 ListView和RecyclerView最大的区别在于数据源改变时的缓存的处理逻辑,ListView有二级缓存, RecycleBin在layout的过程中便于view重用,RecycleBin有两级存储:ActiveViews和ScrapViews。 ActiveViews存储的是layout开始的时候屏幕上那些view。layout结束后,所有ActiveViews中的view被移动到ScrapViews中。 ScrapViews中的views是那些可能被adapter重新用到的view,以避免重新创建不必要的view。 而RecyclerView则是更加灵活地采用了四级缓存。
RecyclerView缓存的item的复用机制 触摸角度 layout角度的话少一个scrapView的调用 设置缓存相关代码方法
//设置mCahceView的缓存数量
RecyclerView.setItemViewCacheSizepublic abstract static class ViewCacheExtension {@Nullablepublic abstract View getViewForPositionAndType(@NonNull Recycler recycler, int position,int type);}
//自定义缓存ImageCacheExtension继承RecyclerView.ViewCacheExtension,一般不自己写,你写了之后就不会走onBindView了,只会走getViewForPositionAndType,你可以从onBindView方法调用你的缓存方法,毕竟这个方法对于同个Viewholder的第二次回调只会发生在recyclerPool中,如果优先了ViewCacheExtension,那就只会走自己的缓存。
ImageCacheExtension cacheExtension = new ImageCacheExtension();//自定义Viewholder的缓存和获取缓存
RecyclerView recyclerView = findViewById(R.id.recycler_view);
recyclerView.setViewCacheExtension(cacheExtension);recyclerView.setAdapter(adapter);RecyclerViewPool
RecyclerView.RecycledViewPool pool = new RecyclerView.RecycledViewPool();
RecyclerView.ViewHolder type1Holder = new Type1ViewHolder(LayoutInflater.from(this).inflate(R.layout.item_type_1, null))