购物车


public class HomeActivity extends BaseActivity<HomePresenter> implements HomeContract.View {

    @BindView(R.id.tb_head)
    Toolbar tbHead;
    @BindView(R.id.rv_cotainner)
    RecyclerView rvCotainner;
    @BindView(R.id.cb_All)
    CheckBox cbAll;
    @BindView(R.id.tv_total)
    TextView tvTotal;
    @BindView(R.id.btn_confirm)
    Button btnConfirm;
    private OutterBean outterBean;
    private OutterAdapter outterAdapter;

    @Override
    public void setupActivityComponent(@NonNull AppComponent appComponent) {
        DaggerHomeComponent //如找不到该类,请编译一下项目
                .builder()
                .appComponent(appComponent)
                .homeModule(new HomeModule(this))
                .build()
                .inject(this);
    }

    @Override
    public int initView(@Nullable Bundle savedInstanceState) {
        return R.layout.activity_home; //如果你不需要框架帮你设置 setContentView(id) 需要自行设置,请返回 0
    }

    @Override
    public void initData(@Nullable Bundle savedInstanceState) {
        //请求商品列表
        mPresenter.requestCarts();
    }

    @Override
    public void showLoading() {

    }

    @Override
    public void hideLoading() {

    }

    @Override
    public void showMessage(@NonNull String message) {
        checkNotNull(message);
        ArmsUtils.snackbarText(message);
    }

    @Override
    public void launchActivity(@NonNull Intent intent) {
        checkNotNull(intent);
        ArmsUtils.startActivity(intent);
    }

    @Override
    public void killMyself() {
        finish();
    }


    /**
     * 使用接口回调将第一个adapter的商品选择的监听事件回调给MainActivity。
     *
     * 使用接口回调将第二个adapter的商品选择的监听事件回调给第一个adapter后再在第一个adapter中回调给MainActivity。
     *
     * 在MainActivity中处理第一个adapter和第二个adapter的事件监听。
     *
     * @param responseInfo
     */
    @Override
    public void showCarts(String responseInfo) {
        Gson gson = new Gson();
        outterBean = gson.fromJson(responseInfo, OutterBean.class);
        List<OutterBean.DataBean> dataBeanList = outterBean.getData();
        //设置外层RecyclerView
        LinearLayoutManager manager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
        outterAdapter = new OutterAdapter(R.layout.container_view, dataBeanList);
        rvCotainner.setLayoutManager(manager);
        rvCotainner.setAdapter(outterAdapter);
        //对适配器回调的内容进行监听
        outterAdapter.setOnCheckedChangeLisenter(new OutterAdapter.OnCheckedChangeLisenter() {
            @Override
            public void onChecked(int layoutPosition, boolean isChecked) {
                //全选条目的标识
                boolean isAllChecked = true;
                //外层条目的判断
                for (int i = 0; i < outterBean.getData().size(); i++) {
                    boolean ischecked = outterBean.getData().get(i).getOutterChecked();
                    //内层条目的判断
                    for (int j = 0; j < outterBean.getData().get(i).getList().size(); j++) {
                        boolean isItemchecked = outterBean.getData().get(i).getList().get(j).getInnerChecked();
                        isAllChecked = (isAllChecked & ischecked & isItemchecked);
                    }
                }

                cbAll.setChecked(isAllChecked);
                //外层条目
                //outterBean.getData().get(layoutPosition).setOutterChecked(isChecked);
                //刷新总体适配器
                outterAdapter.notifyDataSetChanged();
            }

            @Override
            public void onOutterItemChecked(int layoutPosition, boolean checked) {
                outterBean.getData().get(layoutPosition).setOutterChecked(checked);
                //全选条目的标识
                boolean isAllChecked = true;
                //外层条目的判断
                for (int i = 0; i < outterBean.getData().size(); i++) {
                    boolean ischecked = outterBean.getData().get(i).getOutterChecked();
                    //内层条目的判断
                    for (int j = 0; j < outterBean.getData().get(i).getList().size(); j++) {
                        boolean isItemchecked = outterBean.getData().get(i).getList().get(j).getInnerChecked();
                        isAllChecked = (isAllChecked & ischecked & isItemchecked);
                    }
                }

                cbAll.setChecked(isAllChecked);
                //外层条目
                //outterBean.getData().get(layoutPosition).setOutterChecked(isChecked);
                //刷新总体适配器
                outterAdapter.notifyDataSetChanged();
            }


        });
    }


    @OnClick({R.id.cb_All, R.id.btn_confirm})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.cb_All:
                if (cbAll.isChecked()) {
                    //如果全选被选中,最外层的是否选中的状态手动更改为true,刷新适配器
                    for (int i = 0; i < outterBean.getData().size(); i++) {
                        outterBean.getData().get(i).setOutterChecked(true);
                        for (int j = 0; j < outterBean.getData().get(i).getList().size(); j++) {
                            outterBean.getData().get(i).getList().get(j).setInnerChecked(true);
                        }
                    }
                } else {
                    //如果全选未被选中,最外层的是否选中的状态手动更改为false,刷新适配器
                    for (int i = 0; i < outterBean.getData().size(); i++) {
                        outterBean.getData().get(i).setOutterChecked(false);
                        for (int j = 0; j < outterBean.getData().get(i).getList().size(); j++) {
                            outterBean.getData().get(i).getList().get(j).setInnerChecked(false);
                        }
                    }
                }
                outterAdapter.notifyDataSetChanged();
                break;
            case R.id.btn_confirm:
                break;
        }
    }
}


public class InnerAdapter extends BaseQuickAdapter<OutterBean.DataBean.ListBean, BaseViewHolder> {
    public InnerAdapter(int layoutResId, @Nullable List<OutterBean.DataBean.ListBean> data) {
        super(layoutResId, data);
    }

    @Override
    protected void convert(BaseViewHolder helper, OutterBean.DataBean.ListBean item) {
        helper.setText(R.id.tv_showInfo, "¥" + item.getPrice());
        SimpleDraweeView iv_showIcon = helper.getView(R.id.iv_showIcon);
        //根据|进行切割
        String images = item.getImages();
        String[] splitImages = images.split("\\|");
        //Fresco加载图片
        Uri uri = Uri.parse(splitImages[0]);
        iv_showIcon.setImageURI(uri);
        //从Bean对象去取出勾选状态
        Log.e("getInnerChecked", "item.getInnerChecked():" + item.getInnerChecked());
        helper.setChecked(R.id.cb_innerChecked, item.getInnerChecked());
        CheckBox cb_innerChecked = helper.getView(R.id.cb_innerChecked);

        cb_innerChecked.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //内层的状态更改完
                item.setInnerChecked(cb_innerChecked.isChecked());
                //通过接口回调,把状态回显给外层
                onCheckedChangeLisenter.onChecked(helper.getLayoutPosition(),cb_innerChecked.isChecked());
            }
        });
       /* cb_innerChecked.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                //内层的状态更改完
                item.setInnerChecked(cb_innerChecked.isChecked());
                //通过接口回调,把状态回显给外层
                onCheckedChangeLisenter.onChecked(helper.getLayoutPosition(),isChecked);
            }
        });*/
    }


    public interface OnCheckedChangeLisenter {
        void onChecked(int layoutPosition, boolean isChecked);
    }

    public void setOnCheckedChangeLisenter(OnCheckedChangeLisenter onCheckedChangeLisenter) {
        this.onCheckedChangeLisenter = onCheckedChangeLisenter;
    }

    OnCheckedChangeLisenter onCheckedChangeLisenter;
}

public class OutterAdapter extends BaseQuickAdapter<OutterBean.DataBean, BaseViewHolder> {


    private List<OutterBean.DataBean.ListBean> listBeans;
    private CheckBox cb_outter_chose;
    private InnerAdapter innerAdapter;
    private int layoutPosition;


    public interface OnCheckedChangeLisenter {
        void onChecked(int layoutPosition, boolean isChecked);

        void onOutterItemChecked(int layoutPosition, boolean checked);
    }

    public void setOnCheckedChangeLisenter(OnCheckedChangeLisenter onCheckedChangeLisenter) {
        this.onCheckedChangeLisenter = onCheckedChangeLisenter;
    }

    private RecyclerView rv_innerContainer;
    OnCheckedChangeLisenter onCheckedChangeLisenter;

    public OutterAdapter(int layoutResId, @Nullable List<OutterBean.DataBean> data) {
        super(layoutResId, data);
    }

    @Override
    protected void convert(BaseViewHolder helper, OutterBean.DataBean item) {
        //当前的位置
        layoutPosition = helper.getLayoutPosition();


        //外层的条目商家信息内容
        helper.setText(R.id.cb_outter_chose, item.getSellerName());
        //外层的勾选状态
        cb_outter_chose = helper.getView(R.id.cb_outter_chose);
        //外层被点击之后及时通过接口回调的形式通知全选/反选按钮
        cb_outter_chose.setOnCheckedChangeListener(null);
        cb_outter_chose.setChecked(item.getOutterChecked());

        cb_outter_chose.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                item.setOutterChecked(isChecked);
                if (isChecked){
                    for (int i = 0; i < item.getList().size(); i++) {
                        item.getList().get(i).setInnerChecked(true);
                    }
                }else {
                    for (int i = 0; i < item.getList().size(); i++) {
                        item.getList().get(i).setInnerChecked(false);
                    }
                }
                onCheckedChangeLisenter.onOutterItemChecked(helper.getLayoutPosition(),isChecked);
            }
        });


        //外层条目的适配器中需获取内层的RecyclerView
        rv_innerContainer = helper.getView(R.id.rv_innerContainer);
        //内层的数据源是item.getList();
        listBeans = item.getList();
        //需要将数据源设置给适配器
        innerAdapter = new InnerAdapter(R.layout.inner_recyclerview_item, listBeans);
        LinearLayoutManager manager = new LinearLayoutManager(App.getInstance(), LinearLayoutManager.VERTICAL, false);
        rv_innerContainer.setLayoutManager(manager);
        rv_innerContainer.setAdapter(innerAdapter);
        innerAdapter.setOnCheckedChangeLisenter(new InnerAdapter.OnCheckedChangeLisenter() {
            @Override
            public void onChecked(int layoutPosition, boolean isChecked) {
                boolean isAllInnerChecked = true;
                for (int i = 0; i < item.getList().size(); i++) {
                    boolean innerChecked = item.getList().get(i).getInnerChecked();
                    isAllInnerChecked = (isAllInnerChecked & innerChecked);
                }
                cb_outter_chose.setChecked(isAllInnerChecked);
                //外层条目
                item.setOutterChecked(isAllInnerChecked);
                //首先需要更改Bean对象的状态,把具体的位置进行回传
                //然后通过接口回调通知调用者,状态发送改变,及时对全选/反选按钮做更新处理
                onCheckedChangeLisenter.onChecked(layoutPosition, isChecked);
            }
        });
    }

}


public class ToogleButton extends LinearLayout implements View.OnClickListener {

    private Button btn_delete;
    private Button btn_add;
    private TextView tv_num;

    public ToogleButton(Context context) {
        super(context);
    }

    public ToogleButton(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        //设置的布局
        LayoutInflater.from(context).inflate(R.layout.tooglebutton_view, this);
        btn_delete = findViewById(R.id.btn_delete);
        btn_add = findViewById(R.id.btn_add);
        tv_num = findViewById(R.id.tv_num);
        btn_add.setOnClickListener(this);
        btn_delete.setOnClickListener(this);
    }


    @Override
    public void onClick(View v) {
        String numString = tv_num.getText().toString();
        int num = Integer.parseInt(numString);
        switch (v.getId()) {
            case R.id.btn_delete:
                num = (num - 1);
                if (num < 0) {
                    Toast.makeText(App.getInstance(), "必须大于等于0", Toast.LENGTH_SHORT).show();
                    return;
                }
                tv_num.setText(String.valueOf(num));
                break;
            case R.id.btn_add:
                num = (num + 1);
                tv_num.setText(String.valueOf(num));
                break;
        }
    }
}


public class App extends BaseApplication {

    private static App app;

    @Override
    public void onCreate() {
        super.onCreate();

        app = App.this;
        //Fresco初始化
        Fresco.initialize(this);
    }

    public static App getInstance() {
        return app;
    }
}





<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/border_background"
    android:orientation="horizontal">

    <Button
        android:id="@+id/btn_delete"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:background="@mipmap/delete" />

    <TextView
        android:id="@+id/tv_num"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="number"
        android:text="0" />

    <Button
        android:id="@+id/btn_add"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:background="@mipmap/add" />
</LinearLayout>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值