如何将Recyclerview物品保持在同一位置?

Dav*_*Gee 2 android android-recyclerview

我有以下问题.我从Fragment类中填充了Recyclerview.到目前为止一切顺利.然而,当我测试我的应用程序并向上和向下滚动填充的回收列表时,每个项目的内容都会发生变化,也就是说它们会被回收......

滚动后如何保存每个项目的位置并将其内容恢复到相同的位置?

有什么建议?

Gas*_*lén 7

这样做holder.setIsRecyclable(false);会让你变成RecyclerView一个ListView

相反,这样做

只需在 RecyclerAdapter 中重写这两个方法即可

  @Override
    public int getItemViewType(int position) {
        return position;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }
Run Code Online (Sandbox Code Playgroud)


Gun*_*gar 5

好问题,这是你的答案holder.setIsRecyclable(false).

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    LayoutInflater inflater = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = inflater.inflate(R.layout.product_recycle_buyer_list_item, parent, false);
    MyViewHolder holder = new MyViewHolder(view);

    holder.setIsRecyclable(false);

    return holder;
}
Run Code Online (Sandbox Code Playgroud)


and*_*per 5

setIsRecyclable(false)这是一个糟糕的解决方案,因为它会在滚动时创建越来越多的视图,这破坏了使用 RecyclerView 的全部意义。它不仅需要更多的 CPU,而且您滚动并看到新项目的次数越多,它使用的内存就越多。如果显示位图,情况会更糟,因为位图往往会占用大量内存。

相反,您应该做的是实现onBindViewHolder将视图绑定到它应该具有的数据。在使用位图的情况下也使用缓存。

您可以查看我在这里编写的示例代码,它询问了我想要解决的另一个问题。