購物車效果
自定義加減器
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;
}
}
}