购物车逻辑
接口回调传id
public getByid getByid;
public void setGetByid(MovieAdapter.getByid getByid) {
this.getByid = getByid;
}
public interface getByid{
void getchunid(int id);
}
activity
package com.example.zuiholiancart.activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;
import com.example.zuiholiancart.R;
import com.example.zuiholiancart.adapter.CartAdapter;
import com.example.zuiholiancart.bean.CartBean;
import com.example.zuiholiancart.contains.CartUlCallBack;
import com.example.zuiholiancart.contains.ShowContains;
import com.example.zuiholiancart.net.RequestUtily;
import com.example.zuiholiancart.presenter.ShowPresenter;
import com.example.zuiholiancart.view.MyView;
import java.util.HashMap;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.Unbinder;
public class MainActivity extends AppCompatActivity implements ShowContains.ShowView,MyView.getNumcallback,CartUlCallBack {
private Unbinder bind;
@BindView(R.id.rv)
RecyclerView rv;
@BindView(R.id.checkBox)
CheckBox checkBox;
@BindView(R.id.zong)
TextView zong;
private int uid=51;
private ShowPresenter showPresenter;
private CartAdapter cartAdapter;
private List<CartBean.DataBean> data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bind = ButterKnife.bind(this);
showPresenter = new ShowPresenter(this);
HashMap<String,String> params=new HashMap<>();
params.put("uid",uid+"");
showPresenter.CartPresenter(params);
cartAdapter = new CartAdapter(this,this);
rv.setLayoutManager(new LinearLayoutManager(this));
rv.setAdapter(cartAdapter);
//全选反选
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked){
for (CartBean.DataBean datum : data) {
datum.checkBox=true;
for (CartBean.DataBean.ListBean listBean : datum.list) {
listBean.checkBox=true;
}
}
}else {
for (CartBean.DataBean datum : data) {
datum.checkBox=false;
for (CartBean.DataBean.ListBean listBean : datum.list) {
listBean.checkBox=false;
}
}
}
cartAdapter.notifyDataSetChanged();
Totprice();
}
});
}
@Override
public void onSuccessCart(CartBean cartBean) {
data = cartBean.data;
if (cartBean!=null){
cartAdapter.setCarlist(cartBean.data);
}
}
@Override
public void onFaliUre(String msg) {
}
public void Totprice(){
double totprice=0;
for (CartBean.DataBean datum : data) {
for (CartBean.DataBean.ListBean listBean : datum.list) {
if (listBean.checkBox){
totprice+=listBean.price*listBean.productNum;
}
}
}
zong.setText("¥:"+totprice);
}
@Override
public void getNum(int nums) {
Totprice();
}
@Override
public void notifyCall() {
Totprice();
}
@Override
protected void onDestroy() {
super.onDestroy();
if (bind!=null){
bind.unbind();
}
RequestUtily.getGetrequestUtily().mingcuen();
showPresenter.fzncxl();
}
}
CartAdapter
package com.example.zuiholiancart.adapter;
import android.content.Context;
import android.support.annotation.NonNull;
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.TextView;
import com.example.zuiholiancart.R;
import com.example.zuiholiancart.bean.CartBean;
import com.example.zuiholiancart.contains.BuFuleCallBak;
import com.example.zuiholiancart.contains.CartUlCallBack;
import java.util.ArrayList;
import java.util.List;
public class CartAdapter extends RecyclerView.Adapter<CartAdapter.ViewHodle> implements BuFuleCallBak{
private Context context;
private List<CartBean.DataBean> carlist;
private CartUlCallBack cartUlCallBack;
public CartAdapter(Context context, CartUlCallBack cartUlCallBack) {
this.context = context;
carlist=new ArrayList<>();
this.cartUlCallBack = cartUlCallBack;
}
public void setCarlist(List<CartBean.DataBean> carlist) {
this.carlist = carlist;
notifyDataSetChanged();
}
@NonNull
@Override
public ViewHodle onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view=LayoutInflater.from(context).inflate(R.layout.car,parent,false);
return new ViewHodle(view);
}
@Override
public void onBindViewHolder(@NonNull final ViewHodle holder, final int position) {
double totprice=0;
for (CartBean.DataBean.ListBean listBean : carlist.get(position).list) {
totprice+=listBean.price*listBean.productNum;
}
for (CartBean.DataBean.ListBean listBean : carlist.get(position).list) {
listBean.position=position;
}
holder.xiao.setText("小计¥:"+totprice+"元");
holder.name.setText(carlist.get(position).sellerName);
holder.checkBox.setChecked(carlist.get(position).checkBox);
if (carlist.get(position).checkBox){
holder.checkBox.setChecked(true);
}else {
holder.checkBox.setChecked(false);
}
holder.checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
carlist.get(position).checkBox=holder.checkBox.isChecked();
for (CartBean.DataBean.ListBean listBean : carlist.get(position).list) {
listBean.checkBox=carlist.get(position).checkBox;
}
notifyDataSetChanged();
if (cartUlCallBack!=null){
cartUlCallBack.notifyCall();
}
}
});
holder.grv.setLayoutManager(new LinearLayoutManager(context));
holder.grv.setAdapter(new CarttimeAdapter(context,carlist.get(position).list,this));
}
@Override
public int getItemCount() {
return carlist.size();
}
@Override
public void onZhuanTai(boolean ischeckBox, int postion) {
carlist.get(postion).checkBox=ischeckBox;
notifyDataSetChanged();
if (cartUlCallBack!=null){
cartUlCallBack.notifyCall();
}
}
@Override
public void notifyNum() {
if (cartUlCallBack!=null){
cartUlCallBack.notifyCall();
}
}
public class ViewHodle extends RecyclerView.ViewHolder{
private CheckBox checkBox;
private TextView name,xiao;
private RecyclerView grv;
public ViewHodle(View itemView) {
super(itemView);
checkBox=itemView.findViewById(R.id.checkBox);
xiao=itemView.findViewById(R.id.xiao);
name=itemView.findViewById(R.id.name);
grv=itemView.findViewById(R.id.grv);
}
}
}
CarttimeAdapter
package com.example.zuiholiancart.adapter;
import android.content.Context;
import android.net.Uri;
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.TextView;
import com.example.zuiholiancart.R;
import com.example.zuiholiancart.bean.CartBean;
import com.example.zuiholiancart.contains.BuFuleCallBak;
import com.example.zuiholiancart.view.MyView;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.controller.AbstractDraweeController;
import com.facebook.drawee.view.SimpleDraweeView;
import java.util.List;
public class CarttimeAdapter extends RecyclerView.Adapter<CarttimeAdapter.ViewHolder>{
private Context context;
private List<CartBean.DataBean.ListBean> list;
private BuFuleCallBak buFuleCallBak;
public CarttimeAdapter(Context context, List<CartBean.DataBean.ListBean> list, BuFuleCallBak buFuleCallBak) {
this.context = context;
this.list = list;
this.buFuleCallBak = buFuleCallBak;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view=LayoutInflater.from(context).inflate(R.layout.car_time,parent,false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, final int position) {
Uri uri=Uri.parse(list.get(position).images);
AbstractDraweeController build = Fresco.newDraweeControllerBuilder()
.setUri(uri)
.setAutoPlayAnimations(true)
.build();
holder.img.setController(build);
holder.title.setText(list.get(position).title);
holder.price.setText("¥:"+list.get(position).price);
holder.checkBox.setChecked(list.get(position).checkBox);
holder.myview.SteNum(list.get(position).productNum);
holder.checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
list.get(position).checkBox=holder.checkBox.isChecked();
for (CartBean.DataBean.ListBean listBean : list) {
if (!listBean.checkBox){
if (buFuleCallBak!=null){
buFuleCallBak.onZhuanTai(false,listBean.position);
}
return;
}else {
if (buFuleCallBak!=null){
buFuleCallBak.onZhuanTai(true,listBean.position);
}
}
}
}
});
holder.myview.setGetNumcallback(new MyView.getNumcallback() {
@Override
public void getNum(int nums) {
list.get(position).productNum=nums;
if (buFuleCallBak!=null){
buFuleCallBak.notifyNum();
}
}
});
}
@Override
public int getItemCount() {
return list.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
private CheckBox checkBox;
private SimpleDraweeView img;
private TextView title,price;
private MyView myview;
public ViewHolder(View itemView) {
super(itemView);
checkBox=itemView.findViewById(R.id.checkBox);
img=itemView.findViewById(R.id.img);
title=itemView.findViewById(R.id.title);
price=itemView.findViewById(R.id.price);
myview=itemView.findViewById(R.id.myview);
}
}
}
自定义加减器
package com.example.zuiholiancart.view;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.example.zuiholiancart.R;
public class MyView extends LinearLayout {
private TextView jia;
private TextView jian;
private EditText num;
private int nums=1;
public MyView(Context context) {
this(context,null);
}
public MyView(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
private void init(Context context) {
View view=LayoutInflater.from(context).inflate(R.layout.zdyview,this);
jia = view.findViewById(R.id.jia);
jian = view.findViewById(R.id.jian);
num = view.findViewById(R.id.num);
jian.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
nums=Integer.parseInt(num.getText().toString());
nums--;
if (nums==0){
nums=1;
Toast.makeText(getContext(),"不能小于1",Toast.LENGTH_SHORT).show();
}
num.setText(nums+"");
if (getNumcallback!=null){
getNumcallback.getNum(nums);
}
}
});
jia.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
nums=Integer.parseInt(num.getText().toString());
nums++;
num.setText(nums+"");
if (getNumcallback!=null){
getNumcallback.getNum(nums);
}
}
});
}
public void SteNum(int nums){
num.setText(nums+"");
}
public getNumcallback getNumcallback;
public void setGetNumcallback(MyView.getNumcallback getNumcallback) {
this.getNumcallback = getNumcallback;
}
public interface getNumcallback{
void getNum(int nums);
}
}
APP
package com.example.zuiholiancart;
import android.app.Application;
import android.os.Environment;
import com.facebook.cache.disk.DiskCacheConfig;
import com.facebook.common.util.ByteConstants;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.imagepipeline.core.ImagePipelineConfig;
public class APP extends Application {
@Override
public void onCreate() {
super.onCreate();
DiskCacheConfig build = DiskCacheConfig.newBuilder(this)
.setBaseDirectoryName(“monilian_img”)
.setBaseDirectoryPath(Environment.getExternalStorageDirectory())
.setMaxCacheSize(100*ByteConstants.MB)
.build();
ImagePipelineConfig build1 = ImagePipelineConfig.newBuilder(this)
.setMainDiskCacheConfig(build)
.build();
Fresco.initialize(this,build1);
}
}
接口
public interface BuFuleCallBak {
void onZhuanTai(boolean ischeckBox,int postion);
void notifyNum();
}
接口
public interface CartUlCallBack {
void notifyCall();
}