购物车+自定义拦截器

activity_main

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
   >

    <com.liaoinstan.springview.widget.SpringView
        android:layout_width="match_parent"
        android:id="@+id/springview"
        android:layout_weight="1"
        android:layout_height="0dp">

        <android.support.v7.widget.RecyclerView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/recyclerview"       >
        </android.support.v7.widget.RecyclerView>
    </com.liaoinstan.springview.widget.SpringView>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        >
        <CheckBox
            android:id="@+id/allselect"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="全选"
            />

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:orientation="vertical"
            >

            <TextView
                android:id="@+id/totalprice"
                android:layout_width="200dp"
                android:layout_height="wrap_content"
                android:text="总价:"
                />

            <TextView
                android:id="@+id/totalnum"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="共0件商品"
                />

        </LinearLayout>

        <TextView
            android:id="@+id/third_submit"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="去结算"
            android:textColor="#000000"
            />

    </LinearLayout>

</LinearLayout>
 
customerview布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">
    <Button
        android:layout_width="10dp"
        android:layout_height="wrap_content"
        android:id="@+id/revserse"
        android:text="-"
        android:background="#00FFFFFF"/>
    <EditText
        android:inputType="number"
        android:text="1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/edtext"/>
    <Button
        android:background="#00FFFFFF"
        android:text="+"
        android:id="@+id/add"
        android:layout_width="10dp"
        android:layout_height="wrap_content"/>
</LinearLayout>

layout_adapter


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffffff"
    android:orientation="vertical">
    <LinearLayout
        android:layout_width="match_parent"
        android:gravity="center_vertical"
        android:layout_height="wrap_content">
        <CheckBox
            android:id="@+id/shop_check"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checked="false" />
        <TextView
            android:id="@+id/shop_name"
            android:text="商户名称"
            android:layout_marginLeft="10dp"
            android:textSize="20sp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>
    <LinearLayout
        android:layout_marginLeft="30dp"
        android:layout_width="match_parent"
        android:gravity="center_vertical"
        android:layout_height="wrap_content">


        <CheckBox
            android:id="@+id/checkbox"
            android:layout_gravity="center_vertical"
            android:layout_weight="0"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <ImageView
            android:id="@+id/shopface"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:src="@mipmap/ic_launcher"/>
        <LinearLayout
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="196dp"
            android:gravity="center_vertical"
            android:orientation="vertical">
            <TextView
                android:id="@+id/shoptitle"
                android:layout_marginLeft="10dp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="商品信息"/>
            <TextView
                android:id="@+id/shopprice"
                android:layout_marginTop="10dp"
                android:layout_marginLeft="10dp"
                android:textColor="#f00"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="商品价格"/>
            <com.bwie.CoustomView
                android:id="@+id/coustomview"
                android:layout_width="wrap_content"
                android:layout_marginTop="10dp"
                android:layout_marginLeft="10dp"
                android:layout_height="wrap_content">

            </com.bwie.CoustomView>
        </LinearLayout>
        <Button
            android:id="@+id/shopdel"
            android:layout_weight="0"
            android:layout_gravity="center_vertical"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="删除"

          />

    </LinearLayout>
</LinearLayout>
Mactivity


package com.bwie.lenovo.mvpshop;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.CheckBox;
import android.widget.TextView;

import com.bwie.lenovo.mvpshop.adapter.ShopAdapter;
import com.bwie.lenovo.mvpshop.bean.ShopBean;
import com.bwie.lenovo.mvpshop.presenter.MyPresenter;
import com.bwie.lenovo.mvpshop.view.MyView;
import com.liaoinstan.springview.container.DefaultFooter;
import com.liaoinstan.springview.container.DefaultHeader;
import com.liaoinstan.springview.widget.SpringView;

public class MainActivity extends AppCompatActivity implements MyView {

    private RecyclerView mRecyclerView;
    private CheckBox mAllselect;
    private TextView mTotalprice;
    private TextView mTotalnum;
    private TextView mSubmitThird;
    private ShopAdapter shopAdapter;
    private MyPresenter myPresenter;
    private SpringView springView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        myPresenter = new MyPresenter(this, this);
        myPresenter.MyPresenter("http://120.27.23.105/product/getCarts?uid=100");
        //布局管理器
        LinearLayoutManager manager=new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);
        mRecyclerView.setLayoutManager(manager);
        mAllselect.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                shopAdapter.selectAll(mAllselect.isChecked());
            }
        });
        springView.setHeader(new DefaultHeader(MainActivity.this));
        springView.setFooter(new DefaultFooter(MainActivity.this));
        springView.setListener(new SpringView.OnFreshListener() {
            @Override
            public void onRefresh() {
                springView.onFinishFreshAndLoad();
            }

            @Override
            public void onLoadmore() {
                springView.onFinishFreshAndLoad();
            }
        });

    }

    private void initView() {
        mRecyclerView = (RecyclerView) findViewById(R.id.recyclerview);
        mAllselect = (CheckBox) findViewById(R.id.allselect);
        mTotalprice = (TextView) findViewById(R.id.totalprice);
        mTotalnum = (TextView) findViewById(R.id.totalnum);
        mSubmitThird = (TextView) findViewById(R.id.third_submit);
        springView= (SpringView) findViewById(R.id.springview);
    }

    @Override
    public void getData(final ShopBean shopBean) {


        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                shopAdapter = new ShopAdapter(MainActivity.this,shopBean);
                mRecyclerView.setAdapter(shopAdapter);
                shopAdapter.setListener(new ShopAdapter.UpdateUiListener() {
                    @Override
                    public void setTotal(String total, String num, boolean allCheck) {
                        mAllselect.setChecked(allCheck);
                        mTotalnum.setText(num);
                        mTotalprice.setText(total);
                    }
                });
            }
        });
    }
    //内存泄漏
    @Override
    protected void onDestroy() {
        super.onDestroy();
        myPresenter.deatch();
    }

}
Model接口

package com.bwie.lenovo.mvpshop.model;

import okhttp3.Callback;

/**
 * Created by lenovo on 2017/11/21.
 */
public interface IModel {
    public  void initData(String path, Callback callback);
}

Model实现接口的类

package com.bwie.lenovo.mvpshop.model;

import com.bwie.lenovo.mvpshop.utils.OkHttp3Utils;

import okhttp3.Callback;

/**
 * Created by lenovo on 2017/11/21.
 */
public class MyModel implements IModel {
    @Override
    public void initData(String path, Callback callback) {
        OkHttp3Utils.doGet(path,callback);
    }

}
View接口

package com.bwie.lenovo.mvpshop.view;

import com.bwie.lenovo.mvpshop.bean.ShopBean;

/**
 * Created by lenovo on 2017/11/21.
 */
public interface  MyView {
    public  void getData(ShopBean shopBean);
}

Presenter类

package com.bwie.lenovo.mvpshop.presenter;

import android.content.Context;

import com.bwie.lenovo.mvpshop.bean.ShopBean;
import com.bwie.lenovo.mvpshop.model.MyModel;
import com.bwie.lenovo.mvpshop.utils.OnUiCallback;
import com.bwie.lenovo.mvpshop.view.MyView;
import com.google.gson.Gson;

import java.io.IOException;

import okhttp3.Call;

/**
 * Created by lenovo on 2017/11/21.
 */
public class MyPresenter {
    Context context;
    MyView myView;
    MyModel myModel;

    public MyPresenter(Context context, MyView myView) {
        this.context = context;
        this.myView = myView;
        this.myModel = new MyModel();
    }
    public  void  MyPresenter(String path){
        myModel.initData(path, new OnUiCallback() {
            @Override
            public void onFailed(Call call, IOException e) {

            }

            @Override
            public void onSuccess(String result) {
                Gson gson=new Gson();
                ShopBean shopBean=gson.fromJson(result, ShopBean.class);
                myView.getData(shopBean);
            }
        });
    }
    public  void  deatch(){
        myView=null;
    }
}
其中applaction中有ImagelLOader两个类

还有utils

拦截器LoggingInterceptor 

package com.bwie.lenovo.mvpshop.utils;

import java.io.IOException;

import okhttp3.FormBody;
import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

/**
 * Created by lenovo on 2017/11/22.
 */
public class LoggingInterceptor implements Interceptor {
    @Override
    public Response intercept(Chain chain) throws IOException {

        //首先取到Request
        Request request=chain.request();
        Response response=null;
        Request requestprocess=null;
        if("GET".equals(request.method())){
            String url=request.url().toString()+ "&source=android";
            Request.Builder builder=new Request.Builder();
            builder.get().url(url);
            requestprocess=builder.build();
            System.out.println(requestprocess);
            response=chain.proceed(requestprocess);
        }else{
            FormBody.Builder builder=new FormBody.Builder();
            RequestBody requestBody=request.body();
            if (requestBody instanceof FormBody){
                FormBody formBody= (FormBody) requestBody;
                for(int i=0;i<formBody.size();i++){
                   builder.add(formBody.encodedName(i),formBody.encodedValue(i));
                }
                builder.add("source","android");
            }
            requestprocess=request.newBuilder().url(request.url().toString()).post(builder.build()).build();
            response=chain.proceed(requestprocess);
        }
        return response;
    }
}

CustomerView类

package com.bwie;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;

import com.bwie.lenovo.mvpshop.R;

/**
 * Created by lenovo on 2017/11/21.
 */
public class CoustomView extends LinearLayout{
    Context context;
    private Button revserse;
    private Button add;
    private EditText editText;
   private  int mcount=1;
    public CoustomView(Context context) {
        super(context);
    }


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

    public CoustomView(Context context, AttributeSet attrs) {
        super(context, attrs);
        View view= View.inflate(context, R.layout.customerview,null);
        revserse = (Button) view.findViewById(R.id.revserse);
        add = (Button) view.findViewById(R.id.add);
        editText = (EditText) view.findViewById(R.id.edtext);
        revserse.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
               //减号
                try {
                    String content=editText.getText().toString().trim();
                    int count=Integer.valueOf(content);

                    if (count>1){
                       mcount=count-1;
                        editText.setText(mcount+"");
                        if (lisenter!=null){
                            lisenter.click(mcount);
                        }
                    }
                } catch (NumberFormatException e) {
                    e.printStackTrace();
                }
            }
        });
           //加号
        add.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                try {
                    String content=editText.getText().toString().trim();
                    int count=Integer.valueOf(content)+1;
                        mcount=count;
                        editText.setText(mcount+"");
                        if (lisenter!=null){
                            lisenter.click(mcount);
                        }
                } catch (NumberFormatException e) {
                    e.printStackTrace();
                }
            }
        });
//        editText.addTextChangedListener(new TextWatcher() {
//            @Override
//            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
//
//            }
//
//            @Override
//            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
//
//            }
//
//            @Override
//            public void afterTextChanged(Editable editable) {
//
//            }
//        });
        addView(view);
    }
    public void setEditText(int num){
        if (editText!=null){
            editText.setText(num+"");
        }
    }
    private ClickLisenter lisenter;
    public void setListener(ClickLisenter lisenter){
        this.lisenter=lisenter;
    }
    public interface ClickLisenter{
        public void click(int count);
    }
}

Adapter类

package com.bwie.lenovo.mvpshop.adapter;

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

import com.bwie.CoustomView;
import com.bwie.lenovo.mvpshop.R;
import com.bwie.lenovo.mvpshop.bean.ShopBean;
import com.nostra13.universalimageloader.core.ImageLoader;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Created by lenovo on 2017/11/21.
 */
public class ShopAdapter extends RecyclerView.Adapter<ShopAdapter.ViewHolder>{

    Context context;
    private List<ShopBean.DataBean.ListBean> list;
    // 存放 商家的id 和 商家名称
    private Map<String,String> map = new HashMap<>();
    public ShopAdapter(Context context, ShopBean shopBean) {
        this.context = context;
        add(shopBean);
    }

    /**
     * 添加数据 并更新显示
     * @param bean
     */
    public void add(ShopBean bean) {
        if (this.list == null) {
            this.list = new ArrayList<>();
        }
        // 遍历集合
        for (ShopBean.DataBean shop : bean.getData()) {
            map.put(shop.getSellerid(),shop.getSellerName());
            // 遍历商品
            for (int i = 0; i < shop.getList().size(); i++) {
                this.list.add(shop.getList().get(i));
            }
        }
        setFirst(this.list);
        notifyDataSetChanged();
    }
    /**
     * 设置数据源, 控制显示商家
     * @param list
     */
    private void setFirst(List<ShopBean.DataBean.ListBean> list){

        if(list.size() > 0){
            list.get(0).setIsFirst(1);
            for(int i=1;i<list.size();i++){
                if(list.get(i).getSellerid() == list.get(i-1).getSellerid()){
                    list.get(i).setIsFirst(2);
                }else{
                    list.get(i).setIsFirst(1);
                    if(list.get(i).isItemSelected()){
                        list.get(i).setShopSelected(list.get(i).isItemSelected());
                    }
                }
            }
        }
    }

    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View view = View.inflate(context, R.layout.layout_adapter, null);
        return new ViewHolder(view);
    }
    public void onBindViewHolder(final ViewHolder holder, final int position) {

        // 显示商品图片
        if(list.get(position).getIsFirst() == 1){
            //显示商家
            holder.mCheckShop.setVisibility(View.VISIBLE);
            holder.mNameShop.setVisibility(View.VISIBLE);
            holder.mCheckShop.setChecked(list.get(position).isShopSelected());

//            显示商家的名称
//            list.get(position).getSellerid() 取到商家的id
//            map.get()取到 商家的名称
            holder.mNameShop.setText(map.get(String.valueOf(list.get(position).getSellerid())));
        } else {
            holder.mCheckShop.setVisibility(View.GONE);
            holder.mNameShop.setVisibility(View.GONE);
        }

        String[] url = list.get(position).getImages().split("\\|");
        ImageLoader.getInstance().displayImage(url[0],holder.mShopface);

        holder.mShoptitle.setText(list.get(position).getTitle());
        holder.mShopprice.setText(list.get(position).getPrice()+"");
        holder.mCheckShop.setChecked(list.get(position).isShopSelected());
        holder.mCheckbox.setChecked(list.get(position).isItemSelected());
        holder.mCoustomview.setEditText(list.get(position).getNum());
        //删除
        holder.mShopdel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                list.remove(position);
                setFirst(list);
                notifyDataSetChanged();
                sum(list);
            }
        });
        //调用Coustomview的接口
        holder.mCoustomview.setListener(new CoustomView.ClickLisenter() {
            @Override
            public void click(int count) {
                list.get(position).setNum(count);
                notifyDataSetChanged();
                sum(list);
            }
        });
        //商家的CheckBox
       holder.mCheckShop.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View view) {
             list.get(position).setShopSelected(holder.mCheckShop.isChecked());

               for(int i=0;i<list.size();i++){
                   if (list.get(position).getSellerid()==list.get(i).getSellerid()){
                       list.get(i).setItemSelected(holder.mCheckShop.isChecked());
                   }
               }
               notifyDataSetChanged();
               sum(list);
           }
       });
        //商品的CheckBox
        holder.mCheckbox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                list.get(position).setItemSelected(holder.mCheckbox.isChecked());

                for(int i=0;i<list.size();i++){
                    for (int j=0;j<list.size();j++) {
                        if(list.get(i).getSellerid()==list.get(j).getSellerid() && !list.get(j).isItemSelected()){
                          list.get(i).setShopSelected(false);
                            break;
                        }else {
                              list.get(i).setShopSelected(true);
                        }
                    }
                    notifyDataSetChanged();
                    sum(list);
                }
            }
        });

        //   holder.plusViewId.setEditText(list.get(position).getNum());
    }
    //计算总价
    private void sum(List<ShopBean.DataBean.ListBean> list){
        int totalNum=0;
        float totalMoney=0.0f;
        boolean allCheck=true;
        for(int i=0;i<list.size();i++){
            if (list.get(i).isItemSelected()){
                totalNum+=list.get(i).getNum();
                totalMoney+=list.get(i).getNum()*list.get(i).getPrice();
            }else{
                allCheck=false;
            }
        }
      listener.setTotal(totalMoney+"",totalNum+"",allCheck);
    }
    public  void  selectAll(boolean check){
    for(int i=0;i<list.size();i++){
        list.get(i).setShopSelected(check);
        list.get(i).setItemSelected(check);
    }
        notifyDataSetChanged();
        sum(list);
    }
    public int getItemCount() {
        return list == null ? 0 : list.size();
    }
    public class ViewHolder extends RecyclerView.ViewHolder {
        private CheckBox mCheckShop;
        private TextView mNameShop;
        private CheckBox mCheckbox;
        private ImageView mShopface;
        private TextView mShoptitle;
        private TextView mShopprice;
        private CoustomView mCoustomview;
        private Button mShopdel;
        public ViewHolder(View itemView) {
            super(itemView);
            mCheckShop = (CheckBox) itemView.findViewById(R.id.shop_check);
            mNameShop = (TextView) itemView.findViewById(R.id.shop_name);
            mCheckbox = (CheckBox) itemView.findViewById(R.id.checkbox);
            mShopface = (ImageView) itemView.findViewById(R.id.shopface);
            mShoptitle = (TextView) itemView.findViewById(R.id.shoptitle);
            mShopprice = (TextView) itemView.findViewById(R.id.shopprice);
            mCoustomview = (CoustomView) itemView.findViewById(R.id.coustomview);
            mShopdel = (Button) itemView.findViewById(R.id.shopdel);

        }
    }

    public UpdateUiListener listener;
    public void setListener(UpdateUiListener listener){
        this.listener = listener;
    }
    public interface UpdateUiListener {
         void setTotal(String total,String num,boolean allCheck);
    }
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值