jingdong---购物车列表

1show.xml布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.activity.ShowActivity">
<android.support.v7.widget.RecyclerView
    android:id="@+id/recycler_view"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    >
</android.support.v7.widget.RecyclerView>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <CheckBox
        android:id="@+id/s_checkbox"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:text="全选/反选"
        />
    <TextView
        android:id="@+id/s_zongji"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="总计:"
        />
    <Button
        android:id="@+id/s_but"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:text="去结算"
        />
</LinearLayout>
</LinearLayout>

2showactivity--Iview层

package bweie.com.day0824.ui.activity;

import android.content.Intent;
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.Button;
import android.widget.CheckBox;
import android.widget.TextView;

import com.google.gson.Gson;

import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import bweie.com.day0824.R;
import bweie.com.day0824.bean.InfoBean;
import bweie.com.day0824.di.IContract;
import bweie.com.day0824.di.presenterimpl.PresenterImpl;
import bweie.com.day0824.ui.adapter.InfolistAdapter;

public class ShowActivity extends AppCompatActivity implements IContract.IView {
    private List<InfoBean.DataBean> data;
    private InfoBean infoBean;
    private InfolistAdapter listadapter;

    @BindView(R.id.recycler_view)
    RecyclerView recyclerView;
    @BindView(R.id.s_checkbox)
    CheckBox sCheckbox;
    @BindView(R.id.s_zongji)
    TextView sZongji;
    @BindView(R.id.s_but)
    Button sBut;
    private IContract.IPresenter iPresenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_show);
        ButterKnife.bind(this);
        iPresenter = new PresenterImpl();
        iPresenter.AttData(this);
        iPresenter.InfoData();
    }

    @Override
    public void ShowData(final String msg) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Gson gson = new Gson();
                infoBean = gson.fromJson(msg, InfoBean.class);
                data = infoBean.getData();
                LinearLayoutManager layoutManager = new LinearLayoutManager(ShowActivity.this, LinearLayoutManager.VERTICAL, false);
                recyclerView.setLayoutManager(layoutManager);
                listadapter = new InfolistAdapter(ShowActivity.this, data);
                recyclerView.setAdapter(listadapter);

                listadapter.setOnItmeCheckPrice(new InfolistAdapter.OnItmeCheckPrice() {
                    @Override
                    public void OnItmeCheckPrice(double bargainPrice) {
                        sZongji.setText(bargainPrice * 1+"");
                    }
                });
                //适配器点击
                listadapter.onitmechecked(new InfolistAdapter.onsetitmelisente() {
                    @Override
                    public void onitmechecked(int position, boolean checked) {
                    data.get(position).setCheckde(checked);
                    boolean ta=true;
                    for(InfoBean.DataBean dataBean:data){
                     if (dataBean.getisCheckde()==false){
                        ta=false;
                     }
                        sCheckbox.setChecked(ta);
                        listadapter.notifyDataSetChanged();
                      }
                    }
                });
            }
        });
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        iPresenter.DeleteData(this);
    }

    @OnClick({R.id.s_checkbox, R.id.s_but})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.s_checkbox:
                if (sCheckbox.isChecked()) {
                    //如果是选中状态,设置recyclerview中的子条目全部被选中
                    for (int i = 0; i < data.size(); i++) {
                        //对集合中的每个条目定义为被选中
                        data.get(i).setCheckde(true);
                    }
                    //刷新适配器
                    listadapter.notifyDataSetChanged();
                } else {
                    //如果是未选中状态,设置recyclerview中的子条目全部不被选中
                    for (int i = 0; i < data.size(); i++) {
                        data.get(i).setCheckde(false);
                    }
                    //刷新适配器
                    listadapter.notifyDataSetChanged();
                }
                break;

            case R.id.s_but:
                Intent intent=new Intent(ShowActivity.this,ClosingActivity.class);
                startActivity(intent);
                break;
        }
    }
}

3......契约类

package bweie.com.day0824.di;

public interface IContract {
    interface IView{
     void ShowData(String msg);
    }
    interface IModel{
      interface onCallBack{
          void stringMsg(String Msg);
      }
      void requestData(onCallBack onCallBack);
    }
    interface IPresenter<IView>{
        void AttData(IView iView);
        void DeleteData(IView iView);
        void InfoData();
    }
}

4............model层

package bweie.com.day0824.di.modelimpl;

import java.io.IOException;

import bweie.com.day0824.di.IContract;
import bweie.com.day0824.utils.OkHttpUtils;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;

public class ModelImpl implements IContract.IModel {
    private static final String URL="http://www.zhaoapi.cn/product/getCarts?uid=71";
    @Override
    public void requestData(final onCallBack onCallBack) {
        OkHttpUtils.getInstance().get(URL, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                String estring = e.getMessage().toString();
                onCallBack.stringMsg(estring);
            }
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String responseString = response.body().string();
                onCallBack.stringMsg(responseString);
            }
        });

    }
}

5........presenter层

package bweie.com.day0824.di.presenterimpl;

import java.lang.ref.WeakReference;

import bweie.com.day0824.di.IContract;
import bweie.com.day0824.di.modelimpl.ModelImpl;

public class PresenterImpl implements IContract.IPresenter<IContract.IView> {
    IContract.IView iView;
    private IContract.IModel iModel;
    private WeakReference<IContract.IView> iViewWeakReference;
    private WeakReference<IContract.IModel> iModelWeakReference;

    @Override
    public void AttData(IContract.IView iView) {
       this.iView=iView;
        iModel = new ModelImpl();
        iViewWeakReference = new WeakReference<>(iView);
        iModelWeakReference = new WeakReference<>(iModel);
    }

    @Override
    public void DeleteData(IContract.IView iView) {
       iViewWeakReference.clear();
       iModelWeakReference.clear();
    }
    @Override
    public void InfoData() {
        iModel.requestData(new IContract.IModel.onCallBack() {
            @Override
            public void stringMsg(String Msg) {
                iView.ShowData(Msg);
            }
        });
    }
}

6.infoBean 接口的有参无参构造

public class InfoBean {
    private String msg;
    private String code;
    private List<DataBean> data;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public List<DataBean> getData() {
        return data;
    }

    public void setData(List<DataBean> data) {
        this.data = data;
    }

        public static class DataBean {
     
        //选中状态
        private boolean isCheckde;

        public boolean getisCheckde() {
            return isCheckde;
        }
        public void setCheckde(boolean checkde) {
            isCheckde = checkde;
        }

        private String sellerName;
        private String sellerid;
        private List<ListBean> list;



        public String getSellerName() {
            return sellerName;
        }

        public void setSellerName(String sellerName) {
            this.sellerName = sellerName;
        }

        public String getSellerid() {
            return sellerid;
        }

        public void setSellerid(String sellerid) {
            this.sellerid = sellerid;
        }

        public List<ListBean> getList() {
            return list;
        }

        public void setList(List<ListBean> list) {
            this.list = list;
        }

        public static class ListBean {

            private double bargainPrice;
            private String createtime;
            private String detailUrl;
            private String images;
            private int num;
            private int pid;
            private double price;
            private int pscid;
            private int selected;
            private int sellerid;
            private String subhead;
            private String title;

7...utils  工具类

package bweie.com.day0824.utils;

import android.view.View;

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

public class OkHttpUtils  {

    private static OkHttpUtils okHttpUtils;
    OkHttpClient okHttpClient;

    private OkHttpUtils(){
    if (null==okHttpClient){
    synchronized (OkHttpClient.class){
        if (null==okHttpClient){
            okHttpClient = new OkHttpClient.Builder().build();
        }
    }
}
    }

    public static OkHttpUtils getInstance(){
     if (null==okHttpUtils){
       synchronized (OkHttpUtils.class){
           if (null==okHttpUtils){
               okHttpUtils = new OkHttpUtils();
           }
       }
     }
       return okHttpUtils;
    }

public void get(String stringurl, Callback callback){
    Request request = new Request.Builder().url(stringurl).build();
    okHttpClient.newCall(request).enqueue(callback);
}
public void post(String stringurl, FormBody formBody, Callback callback){
    Request request = new Request.Builder().method("POST", formBody).url(stringurl).build();
    okHttpClient.newCall(request).enqueue(callback);
}


}
8.....................infoadapter适配器
package bweie.com.day0824.ui.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.CompoundButton;
import android.widget.ImageView;
import android.widget.TextView;

import com.squareup.picasso.Picasso;

import java.util.List;

import bweie.com.day0824.R;
import bweie.com.day0824.bean.InfoBean;
import bweie.com.day0824.ui.widget.AddDeleteView;

public class InfolistAdapter extends RecyclerView.Adapter<InfolistAdapter.VooHolder> {
    Context context;
    List<InfoBean.DataBean> data;
    private OnItmeCheckPrice onItmeCheckPrice;
    public InfolistAdapter(Context context, List<InfoBean.DataBean> data) {
        this.context = context;
        this.data = data;
    }

    @NonNull
    @Override
    public VooHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.listactivity, parent, false);
        VooHolder vooHolder = new VooHolder(view);
        return vooHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull VooHolder holder, final int position) {
        String images = data.get(position).getList().get(0).getImages();
        if (images.contains("|")&&images!=null){
            String[] split = images.split("\\|");
            Picasso.with(context).load(split[0]).into(holder.list_img);
        }else{
            Picasso.with(context).load(images).into(holder.list_img);
        }
        holder.list_price.setText("单价是:" +data.get(position).getList().get(0).getPrice()+"¥");
        holder.list_list.setText(data.get(position).getList().get(0).getTitle());
        holder.list_checkbox.setChecked(data.get(position).getisCheckde());

        //加减
        holder.list_adddelete.setNumber((int)data.get(position).getList().get(0).getNum());
        holder.list_adddelete.setUpdataNums(new AddDeleteView.UpdataNum(){
            @Override
            public void updata(int num) {
                data.get(position).getList().get(0).setNum(num);
                notifyDataSetChanged();
            }
        });
        //当点击按钮时 回传价格
        holder.list_checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked){
                    double bargainPrice = data.get(position).getList().get(0).getPrice();
                    onItmeCheckPrice.OnItmeCheckPrice(bargainPrice);
                }
            }
        });
    }
    @Override
    public int getItemCount() {
        return data.size();
    }
    class VooHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        private  CheckBox list_checkbox;
        private  ImageView list_img;
        private  TextView list_list;
        private  TextView list_price;
        private  AddDeleteView list_adddelete;

        public VooHolder(View itemView) {
            super(itemView);
            list_checkbox = itemView.findViewById(R.id.list_checkbox);
            list_img = itemView.findViewById(R.id.list_img);
            list_list = itemView.findViewById(R.id.list_list);
            list_price = itemView.findViewById(R.id.list_price);
            //加减
            list_adddelete = itemView.findViewById(R.id.list_AddDelete);
            //多选框被点击时
            list_checkbox.setOnClickListener(this);
        }
        //多选框被点击时
        @Override
        public void onClick(View v) {
            int position = getLayoutPosition();
            boolean checked = list_checkbox.isChecked();
            onsetitmelisente.onitmechecked(position,checked);
        }
    }
    //选中的状态
     public interface onsetitmelisente{
        void onitmechecked(int position, boolean checked);
    }
    onsetitmelisente onsetitmelisente;
    public void onitmechecked(onsetitmelisente onsetitmelisente){
     this.onsetitmelisente=onsetitmelisente;
    }
    //总计
    public interface OnItmeCheckPrice{
        void OnItmeCheckPrice(double bargainPrice);
    }
    public void setOnItmeCheckPrice(OnItmeCheckPrice onItmeCheckPrice){
        this.onItmeCheckPrice = onItmeCheckPrice;
    }
}

9.......列表的布局listactivity

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
<CheckBox
    android:id="@+id/list_checkbox"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
    <ImageView
        android:id="@+id/list_img"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:src="@drawable/ic_launcher_background"
        android:layout_toRightOf="@+id/list_checkbox"
        />
    <TextView
        android:id="@+id/list_list"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="xx"
        android:layout_toRightOf="@+id/list_img"
        />
    <TextView
        android:id="@+id/list_price"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="xx"
        android:layout_toRightOf="@+id/list_img"
        android:layout_below="@+id/list_list"
        />
    <bweie.com.day0824.ui.widget.AddDeleteView
        android:id="@+id/list_AddDelete"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/list_price"
        android:layout_toRightOf="@+id/list_img"
        >
    </bweie.com.day0824.ui.widget.AddDeleteView>
</RelativeLayout>

10.......加减的布局jiajian.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:orientation="horizontal"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
<Button
    android:id="@+id/z_delete"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="-"
    />
    <TextView
        android:id="@+id/z_number"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="1"
        />
    <Button
        android:id="@+id/z_add"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="+"
        />
</LinearLayout>

11.AddDeleteView

public class AddDeleteView extends LinearLayout {

    private Button delete;
    private Button adds;
    private TextView number;

    public AddDeleteView(Context context) {
        super(context);
    }

    public AddDeleteView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }
    //用于接受数据
   public  void setNumber(int nums){
      number.setText(nums+"");
   }
   //接口
    public interface UpdataNum{
        void updata(int num);
    }

     private UpdataNum updataNum;

    public  void setUpdataNums(UpdataNum updataNum){
       this.updataNum=updataNum;
    }

    private void init(final Context context) {
        View view = View.inflate(context, R.layout.jiajian, this);
        //减号
        delete = view.findViewById(R.id.z_delete);
        //加号
        adds = view.findViewById(R.id.z_add);
        //中间的那个值
        number = view.findViewById(R.id.z_number);

        adds.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                String s = number.getText().toString();
                int nums =new Integer(s);
                nums++;
                number.setText(nums+"");
                updataNum.updata(nums);
            }
        });
        delete.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                String s = number.getText().toString();
                int nums =new Integer(s);
                if (nums>1){
                    nums--;
                    number.setText(nums+"");
                    updataNum.updata(nums);
                }else{
                    Toast.makeText(context,"商品数量不能小于1",Toast.LENGTH_LONG).show();
                }
            }
        });
    }
}
 
 

猜你喜欢

转载自blog.csdn.net/qq_41880253/article/details/82026679