购物车

 

View

public class MainActivity extends AppCompatActivity implements SubAdapter.OnItemCheckedLisenter {

    @BindView(R.id.cb_all)
    CheckBox cbAll;
    @BindView(R.id.tv_price)
    TextView tvPrice;
    @BindView(R.id.tv_count)
    TextView tvCount;
    @BindView(R.id.rv_container)
    RecyclerView rvContainer;
    private Context context;
    private ArrayList<ItemBean.DataBean> data;
    private SubAdapter subAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        //获取上下文
        context = this;


        OkHttpClient okHttpClient = new OkHttpClient.Builder().build();
        okHttpClient.newCall(new Request.Builder().url(Constant.URL).build()).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                final String responseInfo = response.body().string();
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Gson gson = new Gson();
                        ItemBean itemBean = gson.fromJson(responseInfo, ItemBean.class);
                        data = (ArrayList<ItemBean.DataBean>) itemBean.getData();
                        LinearLayoutManager manager = new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false);
                        rvContainer.setLayoutManager(manager);
                        //设置适配器
                        subAdapter = new SubAdapter(context, data);
                        rvContainer.setAdapter(subAdapter);
                        subAdapter.setOnItemCheckedLisenter(MainActivity.this);
                    }
                });
            }
        });

    }

    @OnClick({R.id.cb_all, R.id.tv_price, R.id.tv_count})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.cb_all:
                if (cbAll.isChecked()) {
                    //如果是选中状态,设置recyclerview中的子条目全部被选中
                    for (int i = 0; i < data.size(); i++) {
                        //对集合中的每个条目定义为被选中
                        data.get(i).setChecked(true);
                    }
                    //刷新适配器
                    subAdapter.notifyDataSetChanged();
                } else {
                    //如果是未选中状态,设置recyclerview中的子条目全部不被选中
                    for (int i = 0; i < data.size(); i++) {
                        data.get(i).setChecked(false);
                    }
                    //刷新适配器
                    subAdapter.notifyDataSetChanged();
                }

                break;
            case R.id.tv_price:
                break;
            case R.id.tv_count:
                break;
        }
    }

    @Override
    public void onItemChecked(int position, boolean checked) {
        //更新数据源
        data.get(position).setChecked(checked);
        boolean tag = true;
        //遍历集合,查看是否有数据源未勾选
        for (ItemBean.DataBean dataBean : data) {
            if (dataBean.getChecked() == false) {
                tag = false;
            }
        }
        cbAll.setChecked(tag);
        //适配器刷新
        subAdapter.notifyDataSetChanged();
    }
}

Adapter:

public class SubAdapter extends RecyclerView.Adapter<SubAdapter.SubViewHolder> {
    Context context;
    ArrayList<ItemBean.DataBean> data;

    public SubAdapter(Context context, ArrayList<ItemBean.DataBean> data) {
        this.context = context;
        this.data = data;
    }

    @NonNull
    @Override
    public SubViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int position) {
        View rootView = LayoutInflater.from(context).inflate(R.layout.recyclerview_item, viewGroup, false);
        SubViewHolder subViewHolder = new SubViewHolder(rootView);
        return subViewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull SubViewHolder subViewHolder, int position) {
        //对图片的展示
        String images = data.get(position).getList().get(0).getImages();
        if (images != null && images.contains("|")) {
            String[] imgsUrl = images.split("\\|");
            Picasso.get().load(imgsUrl[0]).into(subViewHolder.iv_showIcon);
        } else {
            Picasso.get().load(images).into(subViewHolder.iv_showIcon);
        }
        //对文字的展示
        subViewHolder.tv_showInfo.setText(data.get(position).getList().get(0).getTitle());
        //获取数据源中的条目信息,做及时的更新
        subViewHolder.cb_choose.setChecked(data.get(position).getChecked());
    }

    @Override
    public int getItemCount() {
        return data.size();
    }

    class SubViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        private CheckBox cb_choose;
        private ImageView iv_showIcon;
        private TextView tv_showInfo;

        public SubViewHolder(@NonNull View itemView) {
            super(itemView);
            cb_choose = itemView.findViewById(R.id.cb_choose);
            iv_showIcon = itemView.findViewById(R.id.iv_showIcon);
            tv_showInfo = itemView.findViewById(R.id.tv_showInfo);
            cb_choose.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {
            //把点击时的位置进行回传
            int position = getLayoutPosition();
            //可以把当前的条目的checkbox对应勾选状态进行返回
            boolean checked = cb_choose.isChecked();
            onItemCheckedLisenter.onItemChecked(position,checked);
        }
    }

    public interface OnItemCheckedLisenter {
        //用于反馈,recyclerview中的子条目是否选中,并且及时更新外部的勾选状态
        void onItemChecked(int position, boolean checked);
    }

    OnItemCheckedLisenter onItemCheckedLisenter;

    public void setOnItemCheckedLisenter(OnItemCheckedLisenter onItemCheckedLisenter) {
        this.onItemCheckedLisenter = onItemCheckedLisenter;
    }
}

 

 

 

 

加减器XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:orientation="horizontal"
    android:layout_height="wrap_content">
<Button
    android:id="@+id/dele"
    android:layout_width="40dp"
    android:layout_height="40dp"
    android:text="-"
    />
    <TextView
        android:id="@+id/nums"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="1"
        android:textSize="15dp"
        />
    <Button
        android:id="@+id/add"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:text="+"
        />
</LinearLayout>

加减器自定义View:

public class AddAndDele extends LinearLayout {

    private TextView nums;

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

    public interface UpdataNums{
        void updata(int num);
    }
    private UpdataNums updataNums;

    public void setUpdataNums(UpdataNums updataNums) {
        this.updataNums = updataNums;
    }

    public AddAndDele(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }
    public void setnums(int num){
        nums.setText(num+"");
    }

    private void init(final Context context) {
        View inflate = View.inflate(context, R.layout.addanddele, this);
        Button add = inflate.findViewById(R.id.add);
        nums = inflate.findViewById(R.id.nums);
        Button dele = inflate.findViewById(R.id.dele);
        add.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                String s = nums.getText().toString();
                int num  = new Integer(s);
                num++;
                nums.setText(num+"");
                updataNums.updata(num);
            }
        });

        dele.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                String s = nums.getText().toString();
                int num  = new Integer(s);
                if (num>1){
                    num--;
                    nums.setText(num+"");
                    updataNums.updata(num);
                }else{
                    Toast.makeText(context,"商品数量不能小于1",Toast.LENGTH_LONG).show();
                }

            }
        });

    }
}

 

加减器dapter:

 

public class GouWuCheAdapter extends RecyclerView.Adapter<GouWuCheAdapter.MyHolder> {

    Context context;
    List<GouWuCheBean.DataBean> list;
    private static final String TAG = "GouWuCheAdapter";
    public GouWuCheAdapter(Context context, List<GouWuCheBean.DataBean> list) {
        this.context = context;
        this.list = list;
    }

    @NonNull
    @Override
    public MyHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View inflate = LayoutInflater.from(context).inflate(R.layout.gouwuche_item, parent, false);
        MyHolder myHolder = new MyHolder(inflate);
        return myHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull MyHolder holder, final int position) {
        //holder.item_jiage.setText((int) list.get(position).getList().get(position).getPrice());
        Log.d(TAG, "onBindViewHolder: "+position);
        holder.item_title.setText(list.get(position).getList().get(0).getTitle());
        holder.nums_text.setnums((int) list.get(position).getList().get(0).getNum());
        //加减器接口回调,将bean类数据修改
        holder.nums_text.setUpdataNums(new AddAndDele.UpdataNums() {
            @Override
            public void updata(int num) {
                list.get(position).getList().get(0).setNum(num);
                notifyDataSetChanged();
            }
        });
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    class MyHolder extends RecyclerView.ViewHolder {

        //private final TextView item_jiage;
        private final TextView item_title;
        private final AddAndDele nums_text;
        //private final ImageView item_images;

        public MyHolder(View itemView) {
            super(itemView);
            //item_jiage = itemView.findViewById(R.id.item_jiage);
            item_title = itemView.findViewById(R.id.item_title);
            nums_text = itemView.findViewById(R.id.nums_text);
            //item_images = itemView.findViewById(R.id.item_images);
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值