首页 > 解决方案 > 滚动后 Recyclerview 项目位置 NOT_FOUND

问题描述

所以我有一个recyclerview垂直方向的父级和一个recyclerview与水平方向的父级嵌套的子级。

Onclick功能与子recyclerview一起使用

我创建了一个接口,它将子项的适配器位置返回给父适配器类。

测试用例

  1. 显示recyclerview并单击任何子项。

结果 - 工作正常

  1. 向下滚动recyclerview并单击任何子项。

结果 - 工作正常

  1. 手动滚动回第一个位置,现在单击任何子项。

结果 - 父recylerview位置为 -1(失败的测试用例)

这有什么可能性? 如果您需要任何代码,我可以通过编辑提供

父 ViewHolder 类

class ViewHolder extends RecyclerView.ViewHolder{

        RecyclerView reClassList;


        ViewHolder(View itemView, final Context context) {
            super(itemView);


            reClassList = itemView.findViewById(R.id.recycle_garage_list_class);

            garageListEvents = new GarageListEvents() {
                @Override
                public void getChildPositon(int childPosition) {

                    // TODO Remove
                    Log.e("GARAGE ADAPTER","Garage List Position :"+String.valueOf(getLayoutPosition()));
                }
            };
        }

子 ViewHolder 类

 public class ClassViewHolder extends RecyclerView.ViewHolder {

    public ClassViewHolder(@NonNull View itemView) {
        super(itemView);

        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                garageListEvents.getChildPositon(getAdapterPosition());
            }
        });
    }
}

界面

public interface GarageListEvents {

public void getChildPositon(int childPosition);
}

仅供参考- GarageAdapter 是父适配器

标签: androidandroid-recyclerview

解决方案


我想这与回收观众有关。尝试将其设置为 parent viewholder holder.setIsRecyclable(false);。它对性能影响不大,但应该可以解决问题。


推荐阅读