购物车的MVP分层,展示界面,适配器,以及recycleView的ViewHolder

MainActivity

public class MainActivity extends AppCompatActivity {
    private static final String TAG = MainActivity.class.getSimpleName();
    private TextView tvShopCartSubmit,tvShopCartSelect,tvShopCartTotalNum;
    private RecyclerView rlvShopCart,rlvHotProducts;
    private ShopCartAdapter mShopCartAdapter;
    private LinearLayout llPay;
    private RelativeLayout rlHaveProduct;
    private List<ShopBean.DataBean.ListBean> mAllOrderList = new ArrayList<>();
    private ArrayList<ShopBean.DataBean.ListBean> mGoPayList = new ArrayList<>();
    private List<String> mHotProductsList = new ArrayList<>();
    private TextView tvShopCartTotalPrice;
    private int mCount,mPosition;
    private float mTotalPricel;
    private boolean mSelect;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化控件
        tvShopCartSelect = findViewById(R.id.tv_shopcart_addselect);
        tvShopCartTotalPrice = findViewById(R.id.tv_shopcart_totalprice);
        tvShopCartTotalNum = findViewById(R.id.tv_shopcart_totalnum);
        rlHaveProduct = findViewById(R.id.rl_shopcart_have);
        rlvShopCart = findViewById(R.id.rlv_shopcart);
        llPay = findViewById(R.id.ll_pay);
        tvShopCartSubmit = findViewById(R.id.tv_shopcart_submit);

        rlvShopCart.setLayoutManager(new LinearLayoutManager(this));
        mShopCartAdapter = new ShopCartAdapter(this, mAllOrderList);
        rlvShopCart.setAdapter(mShopCartAdapter);
        //监控全选按钮
        mShopCartAdapter.setmOnResfreshListener(new OnResfreshListener(){
            @Override
            public void onResfresh(boolean isSelect) {
                mSelect = isSelect;
                if (isSelect){
                    Drawable left = getResources().getDrawable(R.drawable.shopcart_selected);
                    tvShopCartSelect.setCompoundDrawablesWithIntrinsicBounds(left,null,null,null);
                }else {
                    Drawable left = getResources().getDrawable(R.drawable.shopcart_unselected);
                    tvShopCartSelect.setCompoundDrawablesWithIntrinsicBounds(left,null,null,null);
                }
                //总计
                float mTotalPrice = 0;
                int mTotalNum = 0;
                mTotalPrice = 0;
                mGoPayList.clear();
                for (int i = 0;i<mAllOrderList.size();i++){
                    if (mAllOrderList.get(i).getSelected() == 0){
                        mTotalPrice += mAllOrderList.get(i).getPrice()+mAllOrderList.get(i).getNum();
                        mTotalNum+=1;
                        mGoPayList.add(mAllOrderList.get(i));
                    }
                    mTotalPricel = mTotalPrice;
                    tvShopCartTotalPrice.setText("总价:"+mTotalPrice);
                    tvShopCartTotalNum.setText("共"+mTotalNum+"件商品");
                }
            }
        });
        tvShopCartSelect.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //反选
                mSelect = !mSelect;
                if (mSelect){
                    //全部选中
                    Drawable left = getResources().getDrawable(R.drawable.shopcart_selected);
                    tvShopCartSelect.setCompoundDrawablesWithIntrinsicBounds(left,null,null,null);
                    for (ShopBean.DataBean.ListBean listBean : mAllOrderList){
                        listBean.setSelected(0);
                        listBean.setShopSelect(true);
                    }
                }else {
                    //全部取消
                    Drawable left = getResources().getDrawable(R.drawable.shopcart_unselected);
                    tvShopCartSelect.setCompoundDrawablesWithIntrinsicBounds(left,null,null,null);
                    for (ShopBean.DataBean.ListBean listBean : mAllOrderList){
                        listBean.setSelected(1);
                        listBean.setShopSelect(false);
                    }
                }
                mShopCartAdapter.notifyDataSetChanged();
            }
        });
        initData();

    }

    private void initData() {
        //构造数据
        OkHttpClient client = new OkHttpClient();
        client.newCall(new Request.Builder().url("https://www.zhaoapi.cn/product/getCarts?uid=71").build()).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                Gson gson = new Gson();
                ShopBean shopBean = gson.fromJson(response.body().string(), ShopBean.class);
                Log.i(TAG,"shopBean:"+shopBean.getMsg());
                for (ShopBean.DataBean dataBean:shopBean.getData()){
                    for (ShopBean.DataBean.ListBean listBean :dataBean.getList()){
                        listBean.setShopName(dataBean.getSellerName());
                        mAllOrderList.add(listBean);
                    }
                }
                isSelectFirst(mAllOrderList);
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        mShopCartAdapter.notifyDataSetChanged();
                    }
                });

            }


        });

    }
    //判断是不是第一个商品,显示商铺
    public static void isSelectFirst(List<ShopBean.DataBean.ListBean> list) {
        //判断是否有商品
        if (list.size()>0){
            list.get(0).setFirst(true);
            for (int i=1;i<list.size();i++){
                if (list.get(i).getSellerid()==list.get(i-1).getSellerid()){
                    list.get(i).setFirst(false);
                }else {
                    list.get(i).setFirst(true);
                }
            }
        }
    }
}

MainActivity

ShopCartAdapter

public class ShopCartAdapter extends RecyclerView.Adapter<ShopCartHolder> {
    private Context context;
    private List<ShopBean.DataBean.ListBean> data;

    public ShopCartAdapter(Context context, List<ShopBean.DataBean.ListBean> data) {
        this.context = context;
        this.data = data;
    }

    @NonNull
    @Override
    public ShopCartHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new ShopCartHolder(LayoutInflater.from(context).inflate(R.layout.shop_cart_item,parent,false));
    }

    @Override
    public void onBindViewHolder(@NonNull ShopCartHolder holder, final int position) {
        //商品图片
        Glide.with(context).load(data.get(position).getImages().split("\\|")[0]).into(holder.ivShopCartClothPic);
         //商品信息
        holder.tvShopCartClothName.setText(data.get(position).getShopName());
        holder.tvShopCartClothPrice.setText("¥"+data.get(position).getPrice());
        holder.etShopCartClothNum.setText(data.get(position).getNum()+"");
        //显示前面的选中状态
        if (data.get(position).getSelected()==0){
            holder.ivShopCartClothSel.setImageDrawable(context.getResources().getDrawable(R.drawable.shopcart_selected));
        }else {
            holder.ivShopCartClothSel.setImageDrawable(context.getResources().getDrawable(R.drawable.shopcart_unselected));
        }
        if (data.get(position).getSelected() == 0){
            holder.ivShopCartShopSel.setImageDrawable(context.getResources().getDrawable(R.drawable.shopcart_selected));
        }else {
            holder.ivShopCartShopSel.setImageDrawable(context.getResources().getDrawable(R.drawable.shopcart_unselected));
        }
        //判断是否显示商铺
        if (position>0){
            //判断是否是一个商铺的商品
            if (data.get(position).getSellerid()==data.get(position-1).getSellerid()){
                holder.llShopCartHeader.setVisibility(View.GONE);
            }else {
                holder.llShopCartHeader.setVisibility(View.VISIBLE);
            }

        }else {
            holder.llShopCartHeader.setVisibility(View.VISIBLE);
        }
        //判断是否全选和计算
        if (mOnResfreshListener !=null){
            boolean isSelect = false;
            for (int i = 0;i<data.size();i++){
                if (data.get(i).getSelected()==1){
                    isSelect = false;
                    break;
                }else {
                    isSelect = true;
                }
            }
            mOnResfreshListener.onResfresh(isSelect);
        }
        //商品数量加
        holder.ivShopCartClothAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                data.get(position).setNum(data.get(position).getNum()+1);
                notifyDataSetChanged();
            }
        });
        //商品数量减
        holder.ivShopCartClothMinus.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (data.get(position).getNum()>1){
                    data.get(position).setNum(data.get(position).getNum()-1);
                    notifyDataSetChanged();
                }
            }
        });
        //删除
        holder.ivShopCartClothDelect.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                data.remove(position);
                MainActivity.isSelectFirst(data);
                notifyDataSetChanged();
            }
        });
        //单个商品选中状态
        holder.ivShopCartClothSel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                data.get(position).setSelected(data.get(position).getSelected()==0 ? 1:0);
                //通过循环找出不同的第一个商品位置
                for (int i = 0;i<data.size();i++){
                    if (data.get(i).isFirst()){
                        for (int j = 0;j<data.size();j++){
                            if (data.get(j).getSellerid() == data.get(i).getSellerid()&&data.get(j).getSelected()==1){
                                data.get(i).setShopSelect(false);
                                break;
                            }else {
                                data.get(i).setShopSelect(true);
                            }

                        }
                    }
                }
                notifyDataSetChanged();
            }
        });
        //商铺选中状态
        holder.ivShopCartShopSel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (data.get(position).isFirst()){
                    data.get(position).setShopSelect(!data.get(position).isShopSelect());
                    for (int i = 0;i<data.size();i++){
                        if (data.get(i).getSellerid() == data.get(position).getSellerid()){
                            data.get(i).setSelected(data.get(position).isShopSelect()?0:1);
                        }
                    }
                    notifyDataSetChanged();
                }
            }
        });

    }

    @Override
    public int getItemCount() {
        return data.size();
    }
    //刷新接口
    private OnResfreshListener mOnResfreshListener;

    public void setmOnResfreshListener(OnResfreshListener mOnResfreshListener) {
        this.mOnResfreshListener = mOnResfreshListener;
    }
}

ShopCartAdapter

event OnResfreshListener

public class OnResfreshListener {
    public void onResfresh(boolean isSelect){

    }
}

event OnResfreshListener

 

holder ShopCartHolder

public class ShopCartHolder extends RecyclerView.ViewHolder{
    public ImageView ivShopCartShopSel;
    public TextView tvShopCartShopName;
    public TextView tvShopCartClothName;
    public TextView tvShopCartClothPrice;
    public TextView etShopCartClothNum;
    public TextView tvShopCartClothColor;
    public TextView tvShopCartClothSize;
    public ImageView ivShopCartClothSel;
    public ImageView ivShopCartClothMinus;
    public ImageView ivShopCartClothAdd;
    public ImageView ivShopCartClothDelect;
    public  ImageView ivShopCartClothPic;
    public LinearLayout llShopCartHeader;

    public ShopCartHolder(View itemView) {
        super(itemView);
        llShopCartHeader = itemView.findViewById(R.id.ll_shopcart_header);
        ivShopCartShopSel = itemView.findViewById(R.id.iv_item_shopcart_shopselect);
        tvShopCartShopName = itemView.findViewById(R.id.tv_item_shopcart_shopname);
        tvShopCartClothName = itemView.findViewById(R.id.tv_item_shopcart_clothname);
        tvShopCartClothPrice = itemView.findViewById(R.id.tv_item_shopcart_cloth_price);
        etShopCartClothNum = itemView.findViewById(R.id.et_item_shopcart_cloth_num);
        tvShopCartClothColor = itemView.findViewById(R.id.tv_item_shopcart_cloth_color);
        tvShopCartClothSize = itemView.findViewById(R.id.tv_item_shopcart_cloth_size);
        ivShopCartClothSel = itemView.findViewById(R.id.tv_item_shopcart_clothselect);
        ivShopCartClothMinus = itemView.findViewById(R.id.iv_item_shopcart_cloth_minus);
        ivShopCartClothAdd = itemView.findViewById(R.id.iv_item_shopcart_cloth_add);
        ivShopCartClothPic = itemView.findViewById(R.id.iv_item_shopcart_cloth_pic);
        ivShopCartClothDelect = itemView.findViewById(R.id.iv_item_shopcart_cloth_delete);


    }
}

holder ShopCartHolder

 

Model  MainModel

public interface MainModel {
    void onSuccess(ShopBean shopBean);
    void  onError(int code);
}

Model  MainModel

Model   MyModel 

public class MyModel {
    private String url = "https://www.zhaoapi.cn/product/getCarts?uid=71";
    public void getData(final MainModel mainModel){
        OKHttpUtils.doget(url, new Callback() {
            @Override
            public void onFailure(Call call, IOException epppnc0) {
                mainModel.onError(1);
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String string = response.body().string();
                //json解析
                ShopBean shopBean = new Gson().fromJson(string, ShopBean.class);
                mainModel.onSuccess(shopBean);
            }
        });

    }
}

Model  MyModel 

presenter MainPresenter

public interface MainPresenter {
    void desc();
}

presenter MainPresenter

presenter MyPresenter

public class MyPresenter{
    private WeakReference<MainModel> modelWeakReference;
    private WeakReference<MainView> viewWeakReference;
    public void showData(String url){
        modelWeakReference.get().hashCode();


    }

}

presenter MyPresenter

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值