首页 > 解决方案 > ImageView 在 RecyclerView 中离开屏幕后似乎就被回收了

问题描述

我刚开始使用 RecyclerView 来显示一些包含 ImageView 和 TextView 的行。当我打开屏幕时,一切都正确显示。如果我快速滚动到列表底部然后快速备份没有问题。但是,一旦我慢慢向下滚动以显示下一行并且第一行不再显示,向上滚动将显示一个黑色方块而不是我的位图。

我认为在向上滚动时会再次调用 onBindViewHolder() 但这仅在滚动 3 行后才会发生。所以看起来 RecyclerView 正在预取一些行

我尝试调用 setItemPrefetchEnabled(false); 在 layoutManager 或 setInitialPrefetchItemCount(0) 上;但它不会改变任何东西

知道发生了什么以及如何解决这个问题吗?

我正在做一个戳,所以这里的代码很少

// 片段

final RecyclerView view = this.fragmentView.findViewById(R.id.recyclerView);
view.setHasFixedSize(true);
LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
//layoutManager.setItemPrefetchEnabled(false);
//layoutManager.setInitialPrefetchItemCount(0);
view.setLayoutManager(layoutManager);
MyAdapter adapter = new MyAdapter(data);
view.setAdapter(adapter);

// 视图持有者

    public class MyViewHolder extends RecyclerView.ViewHolder {

        ImageView thumbnail;
        TextView name;

        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
        }
}

// 适配器

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    // create a new view
    final View view = LayoutInflater.from(parent.getContext()).inflate(R.id.my_layout, parent, false);
    final MyViewHolder viewHolder = buildViewHolder(view);
    view.setTag(viewHolder);        
    return viewHolder;
}

@Override
public void onBindViewHolder(MyViewHolder viewHolder, int position) {
    final MyData myData = this.data.get(position);
    viewHolder.name.setText(myData.getName());
    viewHolder.thumbnail.setImageBitmap(getBitmap(myData.getThumbnailPath()));
}

private MyViewHolder buildViewHolder(View view) {
    final MyViewHolder viewHolder = new MyViewHolder(view);
    viewHolder.name = view.findViewById(R.id.name);
    viewHolder.thumbnail = view.findViewById(R.id.thumbnail);
    return viewHolder;
}

标签: android-recyclerviewandroid-imageview

解决方案


我没有正确理解你的问题,我也无法发表评论。但是,如果您的问题是视图被回收,请尝试:

holder.setIsRecyclable(false).

onBindViewHolder() 这里面告诉“嘿recyclerview,停止回收这么多视图”


推荐阅读