我已经基于“ 创建列表和卡片”指南创建了RecyclerView示例。我的适配器具有仅用于扩大布局的模式实现。
问题是滚动性能差。 这在RecycleView中只有8个项目。
在某些测试中,我验证了在Android L中不会发生此问题。但是在KitKat版本中,性能下降是显而易见的。
我最近遇到了同样的问题,因此这是我对最新的RecyclerView支持库所做的工作:
用 新的优化的ConstraintLayout 替换复杂的布局 (嵌套视图,RelativeLayout)。在Android Studio中激活它:转到SDK Manager->“ SDK工具”选项卡->支持存储库->选中Android的ConstraintLayout和ConstraintLayout的Solver。添加到依赖项:
compile 'com.android.support.constraint:constraint-layout:1.0.2'
如果可能,请使RecyclerView的所有元素具有 相同的height 。并添加:
recyclerView.setHasFixedSize(true);
使用默认的RecyclerView 图形缓存 方法,并根据您的情况进行调整。您不需要第三方库来这样做:
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
-它定义将为图像的每个像素使用多少字节。请记住,这是 首选
。如果源图像具有更多颜色,则仍将使用其他html" target="_blank">配置对其进行解码。
onCreateViewHolder()
并通过接口调用Adapter外部的侦听器,从而传递被单击的项。这样,您就不会一直创建额外的对象。在对视图进行任何更改之前,还要检查标志和状态。 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);
作为最后的手段,依赖notifyDataSetChanged()。
但是,如果您需要使用它,请使用 唯一的ID 维护商品:
adapter.setHasStableIds(true);
RecyclerView将尝试为使用此方法报告适配器具有稳定ID的适配器合成可见的结构更改事件。这可以帮助实现动画和视觉对象的持久性,但是仍然需要重新放置和重新布置单个项目视图。
即使您做的一切正确,RecyclerView仍然可能无法达到您想要的平稳状态。
我正在一个屏幕上工作,其中有一个产品的工具栏信息和类似产品的列表。 除了滚动,一切都很好。当recyclerview出现在屏幕上时,滚动不顺畅。我认为这个想法应该是在没有滚动条的情况下使用recycler视图。因为现在看起来我有两个滚动条,这让滚动很痛苦。有没有一种方法可以让我禁用recyclerview的滚动条,并将其拉伸到所需的高度,让父滚动条平滑地滚动我的屏幕? 我使用的是StaggedGr
我正在做一个音乐播放器。因此,在相册部分,我尝试加载毕加索库的相册图像。图像加载正确,但当我滚动时,就会出现应用滞后问题。我也尝试使用glide,但性能没有改善。我认为此问题是由于此链接的图像加载而出现的。“content://media/external/audio/albumart“。是否有其他方法?如果没有,那么如何提高滚动性能..”
问题内容: 这是我的onCreate,它处理适配器,LinearLayoutManager等。我尝试了每个选项以尝试将其滚动到顶部,但不能。我什至尝试创建自己的自定义LinearLayoutManager。 问题答案: 您尝试过还是? RecyclerView不会在其中实现任何滚动逻辑,而是更加具体,它会根据实现的布局转到特定的索引,在您的情况下是线性的。
如何禁用滚动?
我正在制作一个应用程序,其中我使用和类来制作一个可滚动的水平卡片堆栈。我已经成功地实现了,但我的问题是刷卡向右的方向,我想刷卡向左的方向。 我对SO做了一些研究,发现了1和2 更新:我仍然在努力,几乎没有发现很多,因为它仍然很难改变滚动的方向在回收,所以任何人仍然想帮助我,是欢迎的。 我还发现方法传递滚动位置和direcion可能我错了,但beow code可能是解决方案 我的主要班级 这是我的s
我想实现像Google Play App一样的平滑滚动行为。我尝试过这里提到的解决方案: 解决方案1 解决方案2 解决方案3 但所有上述解决方案都没有像在Google Play应用程序中那样给出预期的结果。以下是xml代码: 如何实现平滑滚动? 编辑:以下是recyclerview适配器 }