一级购物车(自定义view和自定义拦截器interceptor)

自定义拦截器interceptor

public class MyInterceptor implements Interceptor {
    @Override
    public Response intercept(Chain chain) throws IOException {
       Request ysRequest = chain.request();
        FormBody body = (FormBody) ysRequest.body();
        FormBody.Builder builder = new FormBody.Builder();

        for (int i = 0; i <body.size(); i++) {
            String name = body.name(i);
            String value = body.value(i);
            builder.add(name,value);
        }
         builder.add("uri","evaluation");
        FormBody formBody = builder.build();
        Request request = new Request.Builder().url(ysRequest.url()).post(formBody).build();
        return chain.proceed(request);
    }
}

单列模式的网络请求(OkHttp)

package bwie.com.yijicart.net;

import java.util.Map;

import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;


public class HttpUtils {
    private static HttpUtils httpUtils;
    private final OkHttpClient client;

    private HttpUtils() {
        /**
         * okhttp请求+自定义拦截器
         */
        client = new OkHttpClient.Builder().addInterceptor(new MyInterceptor()).build();
    }

    public static HttpUtils getHttpUtils(){
        if(httpUtils==null){
            synchronized (HttpUtils.class){
                httpUtils=new HttpUtils();
            }
        }
        return httpUtils;
    }
    public void doPost(String url, Map<String,String>map, Callback callback){
        FormBody.Builder builder = new FormBody.Builder();
        for (Map.Entry<String,String> e:map.entrySet()) {
            builder.add(e.getKey(),e.getValue());
        }
        FormBody formBody = builder.build();

        Request request = new Request.Builder().url(url).post(formBody).build();
        client.newCall(request).enqueue(callback);


    }
}
自定义View的布局(购物车的加减)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <ImageView
        android:id="@+id/jian"
        android:layout_width="20dp"
        android:layout_height="20dp"
        android:src="@drawable/shopcart_minus_grey" />

    <TextView
        android:id="@+id/tv_num"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:background="@drawable/shopcart_add_btn"
        android:paddingBottom="2dp"
        android:paddingLeft="20dp"
        android:paddingRight="20dp"
        android:paddingTop="2dp"
        android:text="1" />

    <ImageView
        android:id="@+id/jia"
        android:layout_width="20dp"
        android:layout_height="20dp"
        android:layout_marginLeft="5dp"
        android:src="@drawable/shopcart_add_red" />
    <Button
        android:id="@+id/del"
        android:text="删除"
        android:layout_marginLeft="10dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

自定义View

package bwie.com.yijicart.view;

import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import bwie.com.yijicart.R;


public class MyView extends LinearLayout {

    private ImageView jia;
    private ImageView jian;
    private TextView tv_num;
    private Button del;

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

    public MyView(Context context, AttributeSet attrs) {
        super(context, attrs);
        View view = LayoutInflater.from(context).inflate(R.layout.zyitem, this);
        jia = view.findViewById(R.id.jia);
        jian = view.findViewById(R.id.jian);
        tv_num = view.findViewById(R.id.tv_num);
        del = view.findViewById(R.id.del);
    }
    public void addClickListener(OnClickListener onClickListener){
        jia.setOnClickListener(onClickListener);
    }
    public void jianClickListener(OnClickListener onClickListener){
        jian.setOnClickListener(onClickListener);
    }
    public void delClickListener(OnClickListener onClickListener){
        del.setOnClickListener(onClickListener);
    }
    public void setNum(String num) {
        tv_num.setText(num);
    }

    public int getNum() {
        String num = tv_num.getText().toString();
        return Integer.parseInt(num);
    }
}

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:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="bwie.com.yijicart.view.MainActivity">
    <android.support.v7.widget.RecyclerView
        android:id="@+id/rlv"
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </android.support.v7.widget.RecyclerView>
    <LinearLayout
        android:layout_weight="9"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <CheckBox
            android:id="@+id/quanxuan"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            />

        <TextView
            android:layout_marginLeft="5dp"
            android:text="全选"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <TextView
            android:id="@+id/zongji"
            android:layout_marginLeft="80dp"
            android:text="合计:0"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <TextView
            android:layout_marginLeft="100dp"
            android:id="@+id/heji"
            android:text="结算(0)"
            android:gravity="center"
            android:background="@color/colorAccent"
            android:layout_width="wrap_content"
            android:layout_height="match_parent" />
    </LinearLayout>
</LinearLayout>

MainActivity

package bwie.com.yijicart.view;

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.LinearLayout;
import android.widget.TextView;

import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;

import java.util.List;

import bwie.com.yijicart.R;
import bwie.com.yijicart.adapter.Myadapter;
import bwie.com.yijicart.bean.CountPrice;
import bwie.com.yijicart.bean.GoodsBean;
import bwie.com.yijicart.bean.MessageEvent;
import bwie.com.yijicart.persenter.GoodsPersenter;
import bwie.com.yijicart.view.IMain.IMain;

public class MainActivity extends AppCompatActivity implements IMain, View.OnClickListener {

    private RecyclerView mRlv;
    private CheckBox mQuanxuan;
    /**
     * 合计:0
     */
    private TextView mZongji;
    /**
     * 结算(0)
     */
    private TextView mHeji;
    private LinearLayout mActivityMain;
    private Myadapter myadapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        EventBus.getDefault().register(this);
        initView();
        new GoodsPersenter(this).getGoods();

    }

    @Override
    public void showList(List<GoodsBean.DataBean.DatasBean> list) {
        mRlv.setLayoutManager(new LinearLayoutManager(this));
        myadapter = new Myadapter(this, list);
        mRlv.setAdapter(myadapter);
    }

    private void initView() {
        mRlv = (RecyclerView) findViewById(R.id.rlv);
        mQuanxuan = (CheckBox) findViewById(R.id.quanxuan);
        mQuanxuan.setOnClickListener(this);
        mZongji = (TextView) findViewById(R.id.zongji);
        mHeji = (TextView) findViewById(R.id.heji);
        mActivityMain = (LinearLayout) findViewById(R.id.activity_main);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            default:
                break;
            case R.id.quanxuan:
                myadapter.UpdateAllCheck(mQuanxuan.isChecked());
                break;
        }
    }
  @Subscribe
  public void onMessageEvent(MessageEvent event){
      mQuanxuan.setChecked(event.isCheck());
  }
    @Subscribe
    public void onMessageEvent(CountPrice cp){
        mZongji.setText("总价:"+cp.getPrice()+"元");
        mHeji.setText("结算("+cp.getCount()+")");
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);
    }
}
适配器的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_marginLeft="20dp"
    android:background="#FFEEE718"
    android:layout_marginTop="15dp"
    android:layout_height="wrap_content">
    <CheckBox
        android:id="@+id/gx"
        android:layout_marginLeft="25dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <TextView
            android:id="@+id/name2"
            android:layout_marginLeft="20dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <TextView
            android:id="@+id/time"
            android:layout_marginLeft="20dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <TextView
            android:id="@+id/price"
            android:layout_marginLeft="20dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>


     <bwie.com.yijicart.view.MyView
         android:id="@+id/myView"
         android:layout_gravity="center_vertical"
         android:layout_marginLeft="20dp"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content">

     </bwie.com.yijicart.view.MyView>




</LinearLayout>
适配器

package bwie.com.yijicart.adapter;

import android.content.Context;
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 org.greenrobot.eventbus.EventBus;

import java.util.List;

import bwie.com.yijicart.R;
import bwie.com.yijicart.bean.CountPrice;
import bwie.com.yijicart.bean.GoodsBean;
import bwie.com.yijicart.bean.MessageEvent;
import bwie.com.yijicart.view.MyView;

import static bwie.com.yijicart.R.id.price;


public class Myadapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
    private Context context;
    private List<GoodsBean.DataBean.DatasBean> list;

    public Myadapter(Context context, List<GoodsBean.DataBean.DatasBean> list) {
        this.context = context;
        this.list = list;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.childitem, parent, false);
        return new MyViewHodler(view);
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
        final GoodsBean.DataBean.DatasBean datasBean = list.get(position);
        final MyViewHodler myViewHodler= (MyViewHodler) holder;

        myViewHodler.gx.setChecked(datasBean.isCheck());
        myViewHodler.tv_name.setText(datasBean.getType_name());
        myViewHodler.tv_prc.setText(datasBean.getPrice()+"");
        myViewHodler.tv_time.setText(datasBean.getAdd_time());

        myViewHodler.myView.setNum(datasBean.getNum()+"");

        //对勾选进行点击事件
        myViewHodler.gx.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                datasBean.setCheck(myViewHodler.gx.isChecked());
                //计算勾选状态下的数量和价格
                EventBus.getDefault().post(getCountandPrice());
                //通过判断子条目的checkbox是否全部选中,来改变全选的状态
                  UpdateAllQX(isCheckAll());
                  notifyDataSetChanged();
            }
        });
        /**
         * 加的点击事件
         */
        myViewHodler.myView.addClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int num = myViewHodler.myView.getNum();
                ++num;
                datasBean.setNum(num);
                myViewHodler.myView.setNum(num+"");
                if(myViewHodler.gx.isChecked()){
                    EventBus.getDefault().post(getCountandPrice());
                }

              notifyDataSetChanged();
            }
        });
        /***
         * 减的点击事件
         */
          myViewHodler.myView.jianClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int num = myViewHodler.myView.getNum();
                if(num==0){
                    return;
                }
                num--;
                datasBean.setNum(num);
                myViewHodler.myView.setNum(num+"");
                if(myViewHodler.gx.isChecked()){
                    EventBus.getDefault().post(getCountandPrice());
                }

                notifyDataSetChanged();
            }
        });
        /**
         * 点击删除事假
         */
        myViewHodler.myView.delClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                list.remove(position);
                if(myViewHodler.gx.isChecked()){

                    EventBus.getDefault().post(getCountandPrice());
                }
                notifyDataSetChanged();
            }
        });
    }

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

        private final CheckBox gx;
        private final TextView tv_time;
        private final TextView tv_prc;
        private final TextView tv_name;
        private final MyView myView;

        public MyViewHodler(View itemView) {
            super(itemView);
            gx = itemView.findViewById(R.id.gx);
            tv_time = itemView.findViewById(R.id.time);
            tv_prc = itemView.findViewById(price);
            tv_name = itemView.findViewById(R.id.name2);
            myView = itemView.findViewById(R.id.myView);

        }
    }

    /**
     * 判断子条目的checkbox是否全部选中
     * @return
     */
    private boolean isCheckAll(){
        for (int i = 0; i <list.size(); i++) {
            GoodsBean.DataBean.DatasBean datasBean = list.get(i);
         if(!datasBean.isCheck()){
             return false;
         }

        }
        return true;
    }
    /**
     * 改变全选的状态
     */
    private void UpdateAllQX(boolean flag){
        MessageEvent messageEvent = new MessageEvent();
        messageEvent.setCheck(flag);
       EventBus.getDefault().post(messageEvent);
    }
    /**
     * 计算勾选状态下的数量和价格
     */
    private CountPrice getCountandPrice(){
        int count=0;
        int price=0;
        for (int i = 0; i <list.size(); i++) {
            GoodsBean.DataBean.DatasBean datasBean = list.get(i);
            if(datasBean.isCheck()){
                count+=datasBean.getNum();
                price+=datasBean.getPrice()*datasBean.getNum();
            }

        }
        CountPrice countPrice = new CountPrice();
        countPrice.setCount(count);
        countPrice.setPrice(price);

        return countPrice;
    }
    /**
     * 全选时改变所有的CheckBox都为选中的状态
     */
    public void UpdateAllCheck(boolean flag){
        for (int i = 0; i <list.size(); i++) {
            GoodsBean.DataBean.DatasBean datasBean = list.get(i);
             datasBean.setCheck(flag);
        }
        EventBus.getDefault().post(getCountandPrice());
        notifyDataSetChanged();
    }
}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值