mvp购物车

activity
package demo.bw.com.shopp.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.jcodecraeer.xrecyclerview.XRecyclerView;
import java.util.List;
import demo.bw.com.shopp.R;
import demo.bw.com.shopp.activity.ShopActivity;
import demo.bw.com.shopp.callback.ShopCallback;
import demo.bw.com.shopp.callback.ShopUICallback;
import demo.bw.com.shopp.entity.ShopBean;

public class ShopAdapter extends XRecyclerView.Adapter<ShopAdapter.MyVh> implements ShopCallback {
private Context context;
private List<ShopBean.Shop> shops;
private ShopUICallback shopCallback;
public void setshopCallback(ShopUICallback shopCallback){
this.shopCallback =shopCallback;
}
public ShopAdapter(Context context,List<ShopBean.Shop> shops){
this.context=context;
this.shops=shops;
}
@NonNull
@Override
public ShopAdapter.MyVh onCreateViewHolder( @NonNull ViewGroup viewGroup, int i ) {
View view=LayoutInflater.from(context).inflate(R.layout.activity_shop_item,viewGroup,false);
return new MyVh(view);
}

@Override
public void onBindViewHolder( @NonNull final MyVh myVh, int i ) {
   final  ShopBean.Shop shop=shops.get(i);
   myVh.nameTv.setText(shop.sellerName);
   myVh.checkBox.setChecked(shop.isChecked);
 for (ShopBean.Shop.Product product:shop.list){
     product.pos=i;
 }
   ProductAdapter productAdapter=new ProductAdapter(context,shop.list);
   productAdapter.setshopCallback(this);
   myVh.xRecyclerView.setLayoutManager(new LinearLayoutManager(context));
   myVh.xRecyclerView.setAdapter(productAdapter);
   myVh.checkBox.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick( View view ) {
           shop.isChecked=myVh.checkBox.isChecked();
           for (ShopBean.Shop.Product product:shop.list){
               product.isProductChecked=shop.isChecked;
           }
           notifyDataSetChanged();
           if (shopCallback!=null){
               shopCallback.notifyCart();
           }
       }
   });
}

@Override
public int getItemCount() {
    return shops==null? 0 :shops.size();
}

@Override
public void notifyCartItem( boolean isChecked, int postion ) {
    shops.get(postion).isChecked=isChecked;
    notifyDataSetChanged();
    if (shopCallback!=null){
        shopCallback.notifyCart();
    }
}

@Override
public void notifyNum() {
if (shopCallback!=null){
shopCallback.notifyCart();
}
}
public class MyVh extends RecyclerView.ViewHolder {
private XRecyclerView xRecyclerView;
private CheckBox checkBox;
private TextView nameTv;

    public MyVh( @NonNull View itemView ) {
        super(itemView);
        xRecyclerView = itemView.findViewById(R.id.rv);
        checkBox = itemView.findViewById(R.id.checkbox);
        nameTv = itemView.findViewById(R.id.name);
    }
}

}

接口
public class Api {
public final static String BASE_URL = “http://www.zhaoapi.cn/”;
}

package demo.bw.com.shopp.api;

public class ProductApi {
public final static String CART_URL = Api.BASE_URL+“product/getCarts?uid=71”;
}

callback

ShopCallback

package demo.bw.com.shopp.callback;

public interface ShopCallback {
void notifyCartItem(boolean isChecked ,int postion);
void notifyNum();
}

ShopUICallback

package demo.bw.com.shopp.callback;

public interface ShopUICallback {
void notifyCart();
}
Contract
package demo.bw.com.shopp.contract;

import java.util.HashMap;
import java.util.List;

import demo.bw.com.shopp.model.IShopModelCallback;
import demo.bw.com.shopp.entity.ShopBean;

public interface ShopContract {
public abstract class ShopPresenter{
public abstract void getShops( HashMap<String,String> params );
}
interface ISgopModel{
void getShops( HashMap<String,String> params, IShopModelCallback callback );
}
interface IShopView{
void success( List<ShopBean.Shop> list );
void failure(String msg);
}
}

bean

package demo.bw.com.shopp.entity;

import java.util.List;

public class ShopBean {
public String code;
private String msg;
public List data;
public class Shop{
public boolean isChecked;
public String sellerName;
public String sellerid;
public Listlist;

    public class Product{
        public boolean isProductChecked;//二级
        public String title;
        public String images;
        public double price;
        public String pid;
        public int pos;
        public int num=1;
    }
}

}

model
IShopModel
package demo.bw.com.shopp.model;

import android.os.Handler;

import java.io.IOException;
import java.util.HashMap;

import demo.bw.com.shopp.api.ProductApi;
import demo.bw.com.shopp.contract.ShopContract;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;

public class IShopModel implements ShopContract.ISgopModel {
Handler handler=new Handler();
@Override
public void getShops( HashMap<String, String> params, final IShopModelCallback callback ) {
//日志拦截器
HttpLoggingInterceptor interceptor=new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient okHttpClient=new OkHttpClient.Builder().addInterceptor(interceptor).build();
Request request=new Request.Builder().url(ProductApi.CART_URL).build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure( Call call, IOException e ) {
if (callback!=null){
handler.post(new Runnable() {
@Override
public void run() {
callback.failure(“网路无法连接”);
}
});
}
}

        @Override
        public void onResponse( final Call call, Response response ) throws IOException {
           final String result=response.body().string();
           if(callback!=null){
               handler.post(new Runnable() {
                   @Override
                   public void run() {
                       callback.success(result);
                   }
               });
           }
        }
    });
}

}

IShopModelCallback

package demo.bw.com.shopp.model;

public interface IShopModelCallback {
void success(String result);
void failure(String msg);
}

ShopPresenter

package demo.bw.com.shopp.presenter;

import com.google.gson.Gson;

import java.util.HashMap;

import demo.bw.com.shopp.entity.ShopBean;
import demo.bw.com.shopp.model.IShopModel;
import demo.bw.com.shopp.contract.ShopContract;
import demo.bw.com.shopp.model.IShopModelCallback;

public class ShopPresenter extends ShopContract.ShopPresenter {
private IShopModel shopModel;
public ShopPresenter(ShopContract.IShopView iShopView){
shopModel=new IShopModel();
this.iShopView=iShopView;
}
private ShopContract.IShopView iShopView;
@Override
public void getShops( HashMap<String, String> params ) {
shopModel.getShops(params, new IShopModelCallback() {
@Override
public void success( String result ) {
ShopBean shopBean=new Gson().fromJson(result,ShopBean.class);
iShopView.success(shopBean.data);
}

       @Override
       public void failure( String msg ) {
          iShopView.failure(msg);
       }
   });
}

}

view

package demo.bw.com.shopp.widget;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;

public class IView extends View {
public IView( Context context ) {
super(context);
}

public IView( Context context,AttributeSet attrs ) {
    super(context, attrs);
}
public IView( Context context, AttributeSet attrs, int defStyleAttr ) {
    super(context, attrs, defStyleAttr);
}

}

AddMinusView

package demo.bw.com.shopp.widget;

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 demo.bw.com.shopp.R;

public class AddMinusView extends LinearLayout {
private TextView madd,mjian;
private EditText mnum;
private int num=1;

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

public AddMinusView( Context context,  AttributeSet attrs ) {
    this(context, attrs,0);
}

public AddMinusView( 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.add_num,this,true);
    madd=view.findViewById(R.id.add);
    mjian=view.findViewById(R.id.jian);
    mnum=view.findViewById(R.id.num_et);
    mnum.setText("1");
    madd.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick( View view ) {
            num++;
            mnum.setText(num+"");
          if (addMinusCallback!=null){
              addMinusCallback.numCallback(num);
          }
        }
    });

    mjian.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick( View view ) {
            num--;
            if (num==0){
                num=1;
                Toast.makeText(getContext(),"不能减了",Toast.LENGTH_SHORT).show();

            }
            mnum.setText(num+"");
            if (addMinusCallback!=null){
                addMinusCallback.numCallback(num);
            }
        }
    });
}
public  int getNum(){
    return num;
}
private AddMinusCallback addMinusCallback;

public void  setAddMinusCallback(AddMinusCallback addMinusCallback){
    this.addMinusCallback=addMinusCallback;
}
public interface AddMinusCallback {
    void numCallback(int num);
}

}

适配器
adapter
ShopAdapter
package demo.bw.com.shopp.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.jcodecraeer.xrecyclerview.XRecyclerView;
import java.util.List;

import demo.bw.com.shopp.R;
import demo.bw.com.shopp.activity.ShopActivity;
import demo.bw.com.shopp.callback.ShopCallback;
import demo.bw.com.shopp.callback.ShopUICallback;
import demo.bw.com.shopp.entity.ShopBean;

public class ShopAdapter extends XRecyclerView.Adapter<ShopAdapter.MyVh> implements ShopCallback {
private Context context;
private List<ShopBean.Shop> shops;
private ShopUICallback shopCallback;
public void setshopCallback(ShopUICallback shopCallback){
this.shopCallback =shopCallback;
}
public ShopAdapter(Context context,List<ShopBean.Shop> shops){
this.context=context;
this.shops=shops;
}
@NonNull
@Override
public ShopAdapter.MyVh onCreateViewHolder( @NonNull ViewGroup viewGroup, int i ) {
View view=LayoutInflater.from(context).inflate(R.layout.activity_shop_item,viewGroup,false);
return new MyVh(view);
}

@Override
public void onBindViewHolder( @NonNull final MyVh myVh, int i ) {
   final  ShopBean.Shop shop=shops.get(i);
   myVh.nameTv.setText(shop.sellerName);
   myVh.checkBox.setChecked(shop.isChecked);
 for (ShopBean.Shop.Product product:shop.list){
     product.pos=i;
 }
   ProductAdapter productAdapter=new ProductAdapter(context,shop.list);
   productAdapter.setshopCallback(this);
   myVh.xRecyclerView.setLayoutManager(new LinearLayoutManager(context));
   myVh.xRecyclerView.setAdapter(productAdapter);
   myVh.checkBox.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick( View view ) {
           shop.isChecked=myVh.checkBox.isChecked();
           for (ShopBean.Shop.Product product:shop.list){
               product.isProductChecked=shop.isChecked;
           }
           notifyDataSetChanged();
           if (shopCallback!=null){
               shopCallback.notifyCart();
           }
       }
   });
}

@Override
public int getItemCount() {
    return shops==null? 0 :shops.size();
}

@Override
public void notifyCartItem( boolean isChecked, int postion ) {
    shops.get(postion).isChecked=isChecked;
    notifyDataSetChanged();
    if (shopCallback!=null){
        shopCallback.notifyCart();
    }
}

@Override
public void notifyNum() {
  if (shopCallback!=null){
      shopCallback.notifyCart();
  }

}

public class MyVh extends RecyclerView.ViewHolder {
    private XRecyclerView xRecyclerView;
    private CheckBox checkBox;
    private TextView nameTv;

    public MyVh( @NonNull View itemView ) {
        super(itemView);
        xRecyclerView = itemView.findViewById(R.id.rv);
        checkBox = itemView.findViewById(R.id.checkbox);
        nameTv = itemView.findViewById(R.id.name);
    }
}

}

子适配器
ProductAdapter
package demo.bw.com.shopp.adapter;

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.bumptech.glide.Glide;
import com.jcodecraeer.xrecyclerview.XRecyclerView;

import java.util.List;

import demo.bw.com.shopp.R;
import demo.bw.com.shopp.callback.ShopCallback;
import demo.bw.com.shopp.entity.ShopBean;
import demo.bw.com.shopp.widget.AddMinusView;

public class ProductAdapter extends XRecyclerView.Adapter<ProductAdapter.MyVh>{
private Context context;
private List<ShopBean.Shop.Product> shops;
private ShopCallback shopCallback;
public void setshopCallback(ShopCallback shopCallback){
this.shopCallback=shopCallback;
}

public ProductAdapter( Context context, List <ShopBean.Shop.Product> shops ) {
this.context = context;
this.shops = shops;
}

@NonNull
@Override
public ProductAdapter.MyVh onCreateViewHolder( @NonNull ViewGroup viewGroup, int i ) {
    View view=LayoutInflater.from(context).inflate(R.layout.product_item_layout,viewGroup,false);
    return new MyVh(view);
}

@Override
public void onBindViewHolder( @NonNull final ProductAdapter.MyVh myVh, int i ) {
   final ShopBean.Shop.Product product=shops.get(i);
    myVh.checkBox.setChecked(product.isProductChecked);
   String[] imgs=product.images.split("\\|");
   if (imgs!=null&&imgs.length>0){
       Glide.with(context).load(imgs[0]).into(myVh.iv);
   }
   myVh.priceTv.setText("¥;"+product.price);
   myVh.titleTv.setText(product.title);
   myVh.addMinusView.setAddMinusCallback(new AddMinusView.AddMinusCallback() {
       @Override
       public void numCallback( int num ) {
           product.num=num;
           if (shopCallback!=null){
               shopCallback.notifyNum();
           }
       }
   });
   myVh.checkBox.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick( View view ) {
           System.out.println("myVh.checkBox.isChecked():"+myVh.checkBox.isChecked());
             if (!myVh.checkBox.isChecked()){
                  product.isProductChecked=false;
                  if (shopCallback!=null){
                      shopCallback.notifyCartItem(false,product.pos);
                  }

             }else {
                 product.isProductChecked=true;
                 for (ShopBean.Shop.Product shop:shops){
                     if (!myVh.checkBox.isChecked()){
                         shop.isProductChecked=false;
                         if (shopCallback!=null){
                             shopCallback.notifyCartItem(false,product.pos);
                         }
                         return;
                     }
                     if (myVh.checkBox.isChecked()){
                         shop.isProductChecked=true;
                         if (shopCallback!=null){
                             shopCallback.notifyCartItem(true,product.pos);
                         }
                     }
                 }

             }

           }
   });
}

@Override
public int getItemCount() {
    return shops==null? 0 :shops.size();
}

public class MyVh extends RecyclerView.ViewHolder {
    private ImageView iv;
    private CheckBox checkBox;
    private TextView titleTv,priceTv;
    private AddMinusView addMinusView;
    public MyVh( @NonNull View itemView ) {
        super(itemView);
        iv=itemView.findViewById(R.id.iv_product);
        checkBox=itemView.findViewById(R.id.checkbox);
        titleTv=itemView.findViewById(R.id.title);
        priceTv=itemView.findViewById(R.id.price);
        addMinusView=itemView.findViewById(R.id.addminusView);

    }
}

}

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值