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

202005021116 应用层 2019-11-05 09:28:28
最好是伪代码或者代码可以提供一下,大致思路知道,就是这块代码不知道怎么写,
1.UI图:

2.父RV的item点击:
  @Override
public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
EnterpriseSealBean bean = mDatas.get(position);
bean.setExpand(bean.isExpand() ? false : true);//收缩就展开,展开就收缩
mAdapter.notifyItemChanged(position);
}

3.adapter类,里面包含子RV的item点击
public class EnterpriseSealAdapter extends BaseQuickAdapter<EnterpriseSealBean, BaseViewHolder> {

private BottomSheetDialog mDialog;

public EnterpriseSealAdapter(int layoutResId, @Nullable List<EnterpriseSealBean> data) {
super(layoutResId, data);
}

@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);
}

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();
}
});
}
}
...全文
410 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
202005021116 应用层 2019-11-05
  • 打赏
  • 举报
回复
引用 4 楼 王能 的回复:
又看了一遍,你的data搞错了,复用时每次都new出来肯定是选了也白选:

 List<SealImageBean> data = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            SealImageBean bean = new SealImageBean();
            data.add(bean);
        }
你在EnterpriseSealBean里面加一个

class EnterpriseSealBean {
    public List<SealImageBean> childData = new ArrayList<>();
}
然后在Activity或者那个执行一遍的地方造出数据 然后初始化里面adapter的地方改成item.childData:
EnterpriseSealImageAdapter adapter = new EnterpriseSealImageAdapter(R.layout.item_enterprise_seal_image, item.childData);
谢谢,确实是这个问题引起的,自己粗心大意了
王能 2019-11-05
  • 打赏
  • 举报
回复
又看了一遍,你的data搞错了,复用时每次都new出来肯定是选了也白选:

 List<SealImageBean> data = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            SealImageBean bean = new SealImageBean();
            data.add(bean);
        }
你在EnterpriseSealBean里面加一个

class EnterpriseSealBean {
    public List<SealImageBean> childData = new ArrayList<>();
}
然后在Activity或者那个执行一遍的地方造出数据 然后初始化里面adapter的地方改成item.childData:
EnterpriseSealImageAdapter adapter = new EnterpriseSealImageAdapter(R.layout.item_enterprise_seal_image, item.childData);
202005021116 应用层 2019-11-05
  • 打赏
  • 举报
回复
引用 2 楼 王能 的回复:
你里面的RecyclerView Adapter的代码发来。 猜测是你把默认设置gone了没有设置过visible,复用的东西if之后必须要有else
麻烦帮我看一下
public class EnterpriseSealImageAdapter extends BaseQuickAdapter<SealImageBean, BaseViewHolder> {

    public EnterpriseSealImageAdapter(int layoutResId, @Nullable List<SealImageBean> data) {
        super(layoutResId, data);
    }

    @Override
    protected void convert(BaseViewHolder helper, SealImageBean item) {
        TextView view = helper.getView(R.id.tv_seal_status);
        boolean aDefault = item.isDefault();
        if (aDefault) {
            view.setVisibility(View.VISIBLE);//设为了默认
            item.setDefault(true);
        } else {
            view.setVisibility(View.GONE);
            item.setDefault(false);
        }
    }
}
王能 2019-11-05
  • 打赏
  • 举报
回复
你里面的RecyclerView Adapter的代码发来。 猜测是你把默认设置gone了没有设置过visible,复用的东西if之后必须要有else
aaa_Ye 2019-11-05
  • 打赏
  • 举报
回复
BaseRecyclerViewAdapterHelper不是有个BaseMultiItemQuickAdapter吗

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧