请教RecyclerView嵌套RecyclerView的问题

1444.png
这种RecyclerView嵌套RecyclerView,子RV的item设置了默认的值,然后滑动复用后不显示了,有什么好的解决方法?

父RecyclerView的item点击:
` @Override

public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
    EnterpriseSealBean bean = mDatas.get(position);
    boolean expand = bean.isExpand();
    bean.setExpand(bean.isExpand() ? false : true);//收缩就展开,展开就收缩
    mAdapter.notifyItemChanged(position);
}`

子RecyclerView的item点击:
adapter.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(BaseQuickAdapter adapter, View view, int position) {

            Toast.makeText(mContext, "点击" + position, Toast.LENGTH_SHORT).show();
            for (int i = 0; i < data.size(); i++) {
                if (i != position) {
                    data.get(i).setDefault(false);//未选中
                } else {
                    data.get(position).setDefault(true);//选中默认
                }
            }
            adapter.notifyDataSetChanged();
        }
    });
阅读 4.5k
1 个回答

已解决!问题产生原因:子item的数据反复new对象,忘记填充实际数据

  @Override
    protected void convert(BaseViewHolder helper, EnterpriseSealBean item) {
        helper.addOnClickListener(R.id.rv_content);
        RecyclerView recyclerView = helper.getView(R.id.rv_content);
 
        boolean expand = item.isExpand();
        if (expand) {
            recyclerView.setVisibility(View.VISIBLE);
        } else {
            recyclerView.setVisibility(View.GONE);
        }
        //todo:此处应该填充实际数据
        List<SealImageBean> data = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            SealImageBean bean = new SealImageBean();
            data.add(bean);
        }
        EnterpriseSealImageAdapter adapter = new EnterpriseSealImageAdapter(R.layout.item_enterprise_seal_image, data);
        GridLayoutManager manager = new GridLayoutManager(mContext, 2);
        recyclerView.setLayoutManager(manager);
//        recyclerView.setNestedScrollingEnabled(false);
//        recyclerView.setFocusableInTouchMode(false);
//        recyclerView.requestFocus();
        recyclerView.setAdapter(adapter);
        //子RV的item点击
        adapter.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
                Toast.makeText(mContext, "点击" + position, Toast.LENGTH_SHORT).show();
                for (int i = 0; i < data.size(); i++) {
                    if (i != position) {
                        data.get(i).setDefault(false);//未选中
                    } else {
                        data.get(position).setDefault(true);//选中默认
                    }
                }
                adapter.notifyDataSetChanged();
            }
        });
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题