recyclerView嵌套recyclerView实现二级列表购物车

效果图

第一个适配器


public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    List<DataBean> list;
    Context context;
    ViewActivity activity;
    public MyAdapter(List<DataBean> list, Context context) {
        this.list = list;
        this.context = context;
        activity = (ViewActivity) context;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(context).inflate(R.layout.layout_item, null);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull final ViewHolder viewHolder, final int i) {
        viewHolder.name.setText(list.get(i).getSellerName());
        viewHolder.checkBox1.setChecked(list.get(i).isSelect());
        LinearLayoutManager layoutManager = new LinearLayoutManager(context);
        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        viewHolder.recyclerView.setLayoutManager(layoutManager);
        final MyItemAdapter adapter = new MyItemAdapter(list.get(i).getList(),context);
        viewHolder.recyclerView.setAdapter(adapter);
        //第二层CheckBox改变状态监听,
        viewHolder.checkBox1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //调用activity方法使子CheckBox改变
                activity.setCheckAll(i,-1,viewHolder.checkBox1.isChecked());
            }
        });
    }

    @Override
    public int getItemCount() {
        if (list.size() != 0){
            return list.size();
        }
        return 0;
    }

    public class ViewHolder extends RecyclerView.ViewHolder{
        TextView name;
        public CheckBox checkBox1;
        RecyclerView recyclerView;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            name = itemView.findViewById(R.id.name_id);
            checkBox1 = itemView.findViewById(R.id.checkbox1_id);
            recyclerView = itemView.findViewById(R.id.recycler_id);
        }
    }
}

第二个适配器

public class MyItemAdapter extends RecyclerView.Adapter<MyItemAdapter.ViewHolder> {
    List<ListBean> list;
    Context context;
    ViewActivity activity;
    public MyItemAdapter(List<ListBean> list, Context context) {
        this.list = list;
        this.context = context;
        activity = (ViewActivity) context;
    }
    //加载布局
    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(context).inflate(R.layout.layout_item1, null);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull final ViewHolder viewHolder, final int i) {
        viewHolder.title.setText(list.get(i).getTitle());
        viewHolder.price.setText(list.get(i).getPrice()+"");
        viewHolder.num.setText(list.get(i).getNum()+"");
        viewHolder.checkBox2.setChecked(list.get(i).isSelects());
        Glide.with(context).load(list.get(i).getImages()).into(viewHolder.image);
        //最里层CheckBox状态改变监听
        viewHolder.checkBox2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (viewHolder.checkBox2.isChecked() == false){
                    int n = activity.getValue(viewHolder.checkBox2.isChecked(),list.get(i));
                    activity.setCheckAll(n,i,viewHolder.checkBox2.isChecked());
                    activity.check.setChecked(false);
                }else {
                    int n = activity.getValue(viewHolder.checkBox2.isChecked() ,list.get(i) );
                    activity.setCheckAll(n , i ,viewHolder.checkBox2.isChecked());
                }
            }
        });
        //数量加
        viewHolder.jia.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String n = viewHolder.num.getText().toString();
                int j = Integer.parseInt(n);
                j++;
                list.get(i).setNum(j);
                activity.total();
            }
        });
        //数量减
        viewHolder.jian.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int j = Integer.parseInt(viewHolder.num.getText().toString());
                j--;
                if (j > 0){
                    list.get(i).setNum(j);
                    activity.total();
                }else {

                }
            }
        });
    }

    @Override
    public int getItemCount() {
        if (list.size() != 0){
            return list.size();
        }
        return 0;
    }

    public class ViewHolder extends RecyclerView.ViewHolder{
        TextView title,num,price;
        ImageView image;
        CheckBox checkBox2;
        Button jia,jian;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            title = itemView.findViewById(R.id.title_id);
            num = itemView.findViewById(R.id.num_id);
            image = itemView.findViewById(R.id.image_id);
            price = itemView.findViewById(R.id.price_id);
            checkBox2 = itemView.findViewById(R.id.checkbox2_id);
            jia = itemView.findViewById(R.id.jia);
            jian = itemView.findViewById(R.id.jian);
        }
    }
}

activity

public class ViewActivity extends AppCompatActivity implements MyInterface.ViewInterface {
    MyInterface.PresenterInterface presenterInterface;
    RecyclerView recyclerView;
    List<DataBean> list = new ArrayList<>();
    MyAdapter adapter;
    public CheckBox check;
    TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view);
        recyclerView = findViewById(R.id.recyclerView_id);
        presenterInterface = new MyPresenter<>(this);
        check = findViewById(R.id.check_id);
        textView = findViewById(R.id.total_id);
        init();
    }

    private void init() {
        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(layoutManager);
        adapter = new MyAdapter(list,this);
        recyclerView.setAdapter(adapter);
        presenterInterface.toModel();
        //全选反选
        check.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (check.isChecked()){
                    setCheckAll(true);
                    total();
                }else {
                    setCheckAll(false);
                    total();
                }
            }
        });
    }
    //根据最外层CheckBox的选中状态,遍历改变第二层的选中状态
    private void setCheckAll(boolean b) {
        for (int i = 0; i < list.size(); i++) {
            list.get(i).setSelect(b);
            //子集合
            for (int j = 0; j < list.get(i).getList().size(); j++) {
                list.get(i).getList().get(j).setSelects(b);
            }
        }
    }
    /**
     * @param i  商家的下标
     * @param tag  商家中孩子的下标,默认值位-1
     * @param b 是否为选中状态
     */
    //
    public void setCheckAll(int i,int tag,boolean b){
        if (tag != -1){
            list.get(i).getList().get(tag).setSelects(b);
            boolean flag = true;
            //遍历当前集合中的数据
            for (int j = 0; j < list.get(i).getList().size(); j++) {
                //如果没有selects值为false就使上一层CheckBox选中状态为true
                if (!list.get(i).getList().get(j).isSelects()){
                    flag = false;
                }
            }
            //商家的选中状态
            list.get(i).setSelect(flag);
        }else {
            list.get(i).setSelect(b);
            for (int j = 0; j < list.get(i).getList().size(); j++) {
                list.get(i).getList().get(j).setSelects(b);
            }
        }
        isCheck();
        total();
    }
    //当对里面的CheckBox进行操作时 判断最外层CheckBox是否选中
    public void isCheck(){
        boolean flag = true;
        for (int i = 0; i < list.size(); i++) {
            if (!list.get(i).isSelect()){
                flag = false;
            }
        }
        check.setChecked(flag);
    }
    //计算总价
    public void total(){
        int sum = 0;
        for (int i = 0; i < list.size(); i++) {
            for (int j = 0; j < list.get(i).getList().size(); j++) {
                if (list.get(i).getList().get(j).isSelects()){
                    int price = list.get(i).getList().get(j).getPrice();
                    int num = list.get(i).getList().get(j).getNum();
                    sum += price * num;
                }
            }
        }
        textView.setText(sum+"");
        adapter.notifyDataSetChanged();
    }

    /**
     *
     * @param b 最里层CheckBox点击后的选中状态
     * @param o 当前条目的上一层集合
     * @return
     */
    //获得商家的下标
    public int getValue(boolean b,Object o){
        ListBean listBean = (ListBean) o;
        int n = 0;
        for (int i = 0; i < list.size(); i++) {
            for (int j = 0; j < list.get(i).getList().size(); j++) {
                ListBean bean = list.get(i).getList().get(j);
                if (bean.equals(listBean)){
                    bean.setSelects(b);
                    n = i;
                }
            }
        }
        return n;
    }
    //获得数据
    @Override
    public void reFreDisplay(Object object) {
        MyBean bean = (MyBean) object;
        list.addAll(bean.getData());
        //list.remove(0);
        adapter.notifyDataSetChanged();
    }
    //内存释放
    @Override
    protected void onDestroy() {
        super.onDestroy();
        presenterInterface.onDestroy();
        presenterInterface = null;
    }
}

猜你喜欢

转载自blog.csdn.net/zhang1885182/article/details/88995652