購物車(一級)

購物車效果

自定義加減器
package com.jia.dimensions_of_electricity.car;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.jia.dimensions_of_electricity.R;

public class AddAndSubtract extends LinearLayout {

private View root_view;
private TextView custom_car_plus;
private TextView custom_goods_reduce;
private TextView custom_goods_num;
//接口方法
private OnNumChangedListener onNumChangedListener;

public AddAndSubtract(Context context) {
    this(context,null);
}

public AddAndSubtract(Context context, AttributeSet attrs) {
    this(context, attrs,-1);
}

public AddAndSubtract(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    initView(context);
    initListener();
}
//設置監聽
private void initListener() {
    custom_car_plus.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            add();
        }
    });
    custom_goods_reduce.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            sub();
        }
    });
}
//減少
private void sub() {
    String number = custom_goods_num.getText().toString();
    int parseInt = Integer.parseInt(number);
    if(parseInt>1){
        parseInt--;
        setCurrentCount(parseInt);
    }else{
        Toast.makeText(getContext(), "再減少就沒了", Toast.LENGTH_SHORT).show();
    }
}

//增加方法
private void add() {
    String number = custom_goods_num.getText().toString();
    //String類型的number變成Int類型的parseInt
    int parseInt = Integer.parseInt(number);
    parseInt++;//自增
    setCurrentCount(parseInt);
}

//設置改變數量
public void setCurrentCount(int number) {
    custom_goods_num.setText(number+"");
    if(onNumChangedListener!=null){
        onNumChangedListener.onNumChanged(this,number);
    }
}
//獲取到改變後的數量
public int getCurrentCount(){
    return Integer.parseInt(custom_goods_num.getText().toString());
}

public void setOnNumChangedListener(OnNumChangedListener onNumChangedListener) {
    this.onNumChangedListener = onNumChangedListener;
}

public interface OnNumChangedListener{
    void onNumChanged(View view, int currentNum);
}



private void initView(Context context) {
    root_view = View.inflate(context, R.layout.addandsubstract, this);
    custom_car_plus = root_view.findViewById(R.id.custom_goods_plus);
    custom_goods_reduce = root_view.findViewById(R.id.custom_goods_reduce);
    custom_goods_num = root_view.findViewById(R.id.custom_goods_num);
    custom_goods_num.setText("1");
}

}

加減器佈局

<?xml version="1.0" encoding="utf-8"?>

< LinearLayout
xmlns:android=“http://schemas.android.com/apk/res/android
android:orientation=“horizontal”
android:layout_width=“100dp”
android:layout_height=“wrap_content”>
< TextView
android:id="@+id/custom_goods_plus"
android:layout_weight=“1”
android:textSize=“20sp”
android:textColor="#ccc"
android:gravity=“center”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:text="+"/>
< TextView
android:id="@+id/custom_goods_num"
android:layout_weight=“1”
android:gravity=“center”
android:background="#eee"
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:text=“1”/>
< TextView
android:id="@+id/custom_goods_reduce"
android:layout_weight=“1”
android:textSize=“20sp”
android:gravity=“center”
android:textColor="#ccc"
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:text="-"/>

< /LinearLayout>
MVP
Model
package com.jia.dimensions_of_electricity.car;

import com.jia.dimensions_of_electricity.login.LoginBean;
import com.jia.dimensions_of_electricity.net.RetrofitApi;
import com.jia.dimensions_of_electricity.net.RetrofitService;
import com.jia.dimensions_of_electricity.util.SpUtil;

import rx.Observable;
import rx.Observer;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;

public class CarModel {
public void car(final CarCallBack carCallBack){
int userId = SpUtil.getInt(“userId”, -1);
String sessionId = SpUtil.getString(“sessionId”, “”);
RetrofitService retrofitService = RetrofitApi.getInstance().creatApi(RetrofitService.class);
Observable car = retrofitService.shoppingCar(userId,sessionId);
car.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer() {
@Override
public void onCompleted() {

                }

                @Override
                public void onError(Throwable e) {
                    carCallBack.onCarCallBackFailure(e.getMessage());
                }

                @Override
                public void onNext(ShoppingCarBean shoppingCarBean) {
                    carCallBack.onCarCallBackSuccess(shoppingCarBean.getResult());
                }
            });
}

}
View
package com.jia.dimensions_of_electricity.car;

import java.util.List;

public interface CarView {
void onCarViewSuccess(List<ShoppingCarBean.ResultBean> resultBeans);
void onCarViewFailure(String msg);

}

Presenter
package com.jia.dimensions_of_electricity.car;

import java.util.List;

public class CarPresenter {
    private CarView carView;
    private final CarModel carModel;

    public CarPresenter(CarView carView) {
        this.carView = carView;
        carModel = new CarModel();
    }
    public void car(){
        carModel.car(new CarCallBack() {
            @Override
            public void onCarCallBackSuccess(List list) {
                carView.onCarViewSuccess(list);
            }

            @Override
            public void onCarCallBackFailure(String msg) {
                carView.onCarViewFailure(msg);
            }
        });
    }

}

CallBack
package com.jia.dimensions_of_electricity.car;

import java.util.List;

public interface CarCallBack<T> {
    void onCarCallBackSuccess(List<ShoppingCarBean.ResultBean> resultBeans);
    void onCarCallBackFailure(String msg);
}

適配器
package com.jia.dimensions_of_electricity.car;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;

import com.jia.dimensions_of_electricity.R;
import com.squareup.picasso.Picasso;

import java.util.List;

public class CarAdapter extends RecyclerView.Adapter {
    private Context context;
    private List<ShoppingCarBean.ResultBean> resultBeans;
    private AddAndSubtract.OnNumChangedListener onNumChangedListener;

public CarAdapter(Context context, List<ShoppingCarBean.ResultBean> resultBeans) {
    this.context = context;
    this.resultBeans = resultBeans;
}

public List<ShoppingCarBean.ResultBean> getResultBeans() {
    return resultBeans;
}


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

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, final int i) {
    MyCarViewHolder myCarViewHolder = (MyCarViewHolder) viewHolder;
   // myCarViewHolder.cb_car_checked.setImageResource(R.drawable.ic_panorama_fish_eye_black_24dp);
    Picasso.with(context).load(resultBeans.get(i).getPic()).into(myCarViewHolder.car_image);
    myCarViewHolder.car_title.setText(resultBeans.get(i).getCommodityName());
    myCarViewHolder.car_price.setText("¥:"+resultBeans.get(i).getPrice()+"");
    myCarViewHolder.addSubView.setOnNumChangedListener(new AddAndSubtract.OnNumChangedListener() {
        @Override
        public void onNumChanged(View view, int currentNum) {
            resultBeans.get(i).setCount(currentNum);
            onNumChangedListener.onNumChanged(view, currentNum);
        }
    });
    //int currentCount = myCarViewHolder.addSubView.getCurrentCount();
    myCarViewHolder.addSubView.setCurrentCount(resultBeans.get(i).getCount());


    //點擊 單選框
    if (resultBeans.get(i).isChecked()) {
        myCarViewHolder.cb_car_checked.setImageResource(R.drawable.ic_check_circle_black_24dp);
    }else {
        myCarViewHolder.cb_car_checked.setImageResource(R.drawable.ic_panorama_fish_eye_black_24dp);
    }
    myCarViewHolder.cb_car_checked.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int commodityId = resultBeans.get(i).getCommodityId();
            clickCircleImage.onClickCircleImage(commodityId);
        }
    });
}

public void setOnNumChangedListener(AddAndSubtract.OnNumChangedListener onNumChangedListener) {
    this.onNumChangedListener = onNumChangedListener;
}

@Override
public int getItemCount() {
    return resultBeans.size();
}
class MyCarViewHolder extends RecyclerView.ViewHolder {

    private final ImageView cb_car_checked;
    private final ImageView car_image;
    private final TextView car_title;
    private final TextView car_price;
    private final AddAndSubtract addSubView;


    public MyCarViewHolder(@NonNull View itemView) {
        super(itemView);
        cb_car_checked = itemView.findViewById(R.id.cb_car_checked);
        car_image = itemView.findViewById(R.id.car_image);
        car_title = itemView.findViewById(R.id.car_title);
        car_price = itemView.findViewById(R.id.car_price);
        addSubView = itemView.findViewById(R.id.addSubView);

        /*addSubView.setOnNumChangedListener(new AddAndSubtract.OnNumChangedListener() {
            @Override
            public void onNumChanged(View view, int currentNum) {
                onNumChangedListener.onNumChanged(view,currentNum);
                //resultBeans.get(getLayoutPosition()).setCount(currentNum);

            }
        });*/

    }


}
public interface ClickCircleImage{
    void onClickCircleImage(int commodityId);
}
private ClickCircleImage clickCircleImage;

public void setClickCircleImage(ClickCircleImage clickCircleImage) {
    this.clickCircleImage = clickCircleImage;
}

}
Fragment
package com.jia.dimensions_of_electricity.car;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;

import com.jia.dimensions_of_electricity.R;
import com.jia.dimensions_of_electricity.util.ToastUtils;

import java.util.ArrayList;
import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.Unbinder;

/**
 * A simple {@link Fragment} subclass.
 */
public class ShoppingCarFragment extends Fragment implements CarView {

    @BindView(R.id.car_recycler)
    RecyclerView carRecycler;
    @BindView(R.id.car_check_all)
    CheckBox carCheckAll;
    Unbinder unbinder;
    @BindView(R.id.total_price)
    TextView totalPrice;
    private CarPresenter carPresenter;
    private CarAdapter carAdapter;
    private List<ShoppingCarBean.ResultBean> resultBeanList = new ArrayList<>();

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_shopping_car, container, false);

        unbinder = ButterKnife.bind(this, view);
        carPresenter = new CarPresenter(this);
        carPresenter.car();
        // clickCircle();
        return view;
    }


    @Override
    public void onDestroyView() {
        super.onDestroyView();
        unbinder.unbind();
    }


    @Override
    public void onCarViewSuccess(final List<ShoppingCarBean.ResultBean> resultBeans) {
        for (int i = 0; i < resultBeans.size(); i++) {
            resultBeans.get(i).setChecked(false);
        }
        resultBeanList.addAll(resultBeans);
        carAdapter = new CarAdapter(getActivity(), resultBeans);
        carRecycler.setAdapter(carAdapter);
        //取消刷新動畫
        ((DefaultItemAnimator) carRecycler.getItemAnimator()).setSupportsChangeAnimations(false);
        carRecycler.setLayoutManager(new LinearLayoutManager(getActivity()));

        /*carAdapter.setOnNumChangedListener(new AddAndSubtract.OnNumChangedListener() {
            @Override
            public void onNumChanged(View view, int currentNum) {
                getTotal();
            }
        });*/
        //點擊單選框 選中
        carAdapter.setClickCircleImage(new CarAdapter.ClickCircleImage() {
            @Override
            public void onClickCircleImage(int commodityId) {
                List<ShoppingCarBean.ResultBean> resultBeans = carAdapter.getResultBeans();
                for (int i = 0; i < resultBeans.size(); i++) {
                    int commodityId1 = resultBeans.get(i).getCommodityId();
                    if(commodityId1 == commodityId){
                        boolean checked = resultBeans.get(i).isChecked();
                        if(checked){
                            resultBeans.get(i).setChecked(false);
                        }else {
                            resultBeans.get(i).setChecked(true);
                        }
                    }

                }
                carAdapter.notifyDataSetChanged();
                getTotal();
            }
        });
        //點加減號 計算
        carAdapter.setOnNumChangedListener(new AddAndSubtract.OnNumChangedListener() {
            @Override
            public void onNumChanged(View view, int currentNum) {
               // carAdapter.notifyDataSetChanged();
                getTotal();
            }
        });

        carCheckAll.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    for (int i = 0; i < resultBeans.size(); i++) {
                        resultBeans.get(i).setChecked(true);
                    }
                } else {
                    for (int i = 0; i < resultBeans.size(); i++) {
                        resultBeans.get(i).setChecked(false);
                    }
                }
                carAdapter.notifyDataSetChanged();
                getTotal();
            }

        });

    }

    private void getTotal() {
        double total = 0;
        List<ShoppingCarBean.ResultBean> resultBeans = carAdapter.getResultBeans();
        for (int i = 0; i < resultBeans.size(); i++) {
            if(resultBeans.get(i).isChecked()){
                int price = resultBeans.get(i).getPrice();
                int count = resultBeans.get(i).getCount();
                total = total+(price * count);
            }
        }
        totalPrice.setText("¥:"+total);
    }


    @Override
    public void onCarViewFailure(String msg) {
        ToastUtils.showToast(msg);
    }

}

Bean類
package com.jia.dimensions_of_electricity.car;

import java.util.List;

public class ShoppingCarBean {

/**
 * result : [{"commodityId":19,"commodityName":"環球 時尚拼色街拍百搭小白鞋 韓版原宿ulzzang板鞋 女休閒鞋","count":1,"pic":"http://172.17.8.100/images/small/commodity/nx/bx/2/1.jpg","price":78},{"commodityId":29,"commodityName":"秋冬新款平底毛毛豆豆鞋加絨單鞋一腳蹬懶人鞋休閒","count":4,"pic":"http://172.17.8.100/images/small/commodity/nx/ddx/5/1.jpg","price":278}]
 * message : 查詢成功
 * status : 0000
 */

private String message;
private String status;
private List<ResultBean> result;

public String getMessage() {
    return message;
}

public void setMessage(String message) {
    this.message = message;
}

public String getStatus() {
    return status;
}

public void setStatus(String status) {
    this.status = status;
}

public List<ResultBean> getResult() {
    return result;
}

public void setResult(List<ResultBean> result) {
    this.result = result;
}

public static class ResultBean {
    /**
     * commodityId : 19
     * commodityName : 環球 時尚拼色街拍百搭小白鞋 韓版原宿ulzzang板鞋 女休閒鞋
     * count : 1
     * pic : http://172.17.8.100/images/small/commodity/nx/bx/2/1.jpg
     * price : 78
     */

    private int commodityId;
    private String commodityName;
    private int count;
    private String pic;
    private int price;
    private boolean checked;

    public boolean isChecked() {
        return checked;
    }

    public void setChecked(boolean checked) {
        this.checked = checked;
    }

    public int getCommodityId() {
        return commodityId;
    }

    public void setCommodityId(int commodityId) {
        this.commodityId = commodityId;
    }

    public String getCommodityName() {
        return commodityName;
    }

    public void setCommodityName(String commodityName) {
        this.commodityName = commodityName;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    public String getPic() {
        return pic;
    }

    public void setPic(String pic) {
        this.pic = pic;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }
}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章