我已经基于Creating Lists and Cards指南创建了RecyclerView示例。我的适配器具有仅用于扩大布局的模式实现。
问题是滚动性能差。 在RecycleView中只有8个项目。
在某些测试中,我验证了在Android L中不会发生此问题。但是在KitKat版本中,性能下降是显而易见的。
最佳答案
我最近遇到了同样的问题,因此这是我对最新的RecyclerView支持库所做的工作:
compile 'com.android.support.constraint:constraint-layout:1.0.2'
recyclerView.setHasFixedSize(true);
recyclerView.setItemViewCacheSize(20);
recyclerView.setDrawingCacheEnabled(true);
recyclerView.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
InputStream is = (InputStream) url.getContent();
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.RGB_565;
Bitmap image = BitmapFactory.decodeStream(is, null, options);
最重要的部分是指定
inPreferredConfig
-它定义将为图像的每个像素使用多少个字节。请记住,这是首选。如果源图像具有更多颜色,则仍将使用其他配置对其进行解码。onCreateViewHolder()
中设置一次OnClickListener,并通过接口(interface)调用Adapter外部的监听器,并传递单击的项目。这样,您就不会一直创建额外的对象。在对 View 进行任何更改之前,还请检查标志和状态。viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Item item = getItem(getAdapterPosition());
outsideClickListener.onItemClicked(item);
}
});
notifyDataSetChanged()
使整个数据集无效,而只需使用:adapter.notifyItemRangeInserted(rangeStart, rangeEnd);
adapter.notifyItemRemoved(position);
adapter.notifyItemChanged(position);
adapter.notifyItemInserted(position);
但是,如果需要使用它,请使用唯一ID 维护商品:
adapter.setHasStableIds(true);
即使您做的一切正确,RecyclerView仍然有可能无法达到您想要的效果。
关于java - Android RecyclerView滚动性能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27188536/