购物车




布局---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
    android:layout_height="match_parent"
    tools:context="com.example.com.shopping.view.MainActivity">

   <ListView
       android:layout_width="match_parent"
       android:layout_height="0dp"
       android:layout_weight="1"
       android:id="@+id/lv">

   </ListView>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        >
<CheckBox
    android:layout_width="0dp"
    android:layout_weight="1"
    android:layout_height="wrap_content"
    android:id="@+id/che"
    android:text="全选"/>
<TextView
    android:layout_width="0dp"
    android:layout_weight="1"
    android:layout_height="wrap_content"
    android:text="总价:"/>
        <TextView
            android:id="@+id/tv_total"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:text="0"/>
        <Button
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:id="@+id/btn"
            android:text="结算"/>


    </LinearLayout>

</LinearLayout>



子布局----------------------------------------------------------------------------------------------------------------------------------------------


<?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="match_parent">
<CheckBox
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dp"
    android:id="@+id/checkbox"/>
<ImageView
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:id="@+id/img"
    android:layout_marginLeft="40dp"
    android:layout_toRightOf="@id/che"/>
    
    <LinearLayout
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:id="@+id/li"
        android:layout_toRightOf="@id/img"
        android:orientation="vertical"
        >
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/tv_title"

            />
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            >
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/tv_price"/>
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="-"
                android:id="@+id/jian"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="2"
                android:id="@+id/tv_num"/>
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="+"
                android:id="@+id/jia"/>

        </LinearLayout>
    </LinearLayout>
</RelativeLayout>



view层里mainactivity--------------------------------------------------------------------------------------------------------------------

package com.example.com.shopping.view;

import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.CheckBox;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import com.example.com.shopping.R;
import com.example.com.shopping.adapter.MyAdapter;
import com.example.com.shopping.moudle.Bean.ShoppingBean;
import com.example.com.shopping.presenter.MyDataPersenter;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity implements DataView,MyAdapter.NumInterface{

    String dataUrl ="https://www.zhaoapi.cn/product/getProducts?pscid=1";

            private Handler handler=new Handler(){
                @Override
                public void handleMessage(Message msg) {
                    super.handleMessage(msg);

                    list = (List<ShoppingBean.DataBean>) msg.obj;
                    myAdapter = new MyAdapter(MainActivity.this, list);
                    lv.setAdapter(myAdapter);
                    myAdapter.setShopping(MainActivity.this);

            //Toast.makeText(MainActivity.this,"aa",Toast.LENGTH_SHORT).show();
        }
    };
    private ListView lv;
    private TextView tv_total;
    private CheckBox che;
    private List<ShoppingBean.DataBean> list;
    private MyAdapter myAdapter;
    private int prices=0;
    private int nums=0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        lv = findViewById(R.id.lv);

        MyDataPersenter persenter=new MyDataPersenter(this);

        persenter.netWork(dataUrl);

        tv_total = findViewById(R.id.tv_total);

        che = findViewById(R.id.che);

        che.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (che.isChecked()){
                    for (int x=0;x<list.size();x++){
                        list.get(x).setCheck(true);
                        quanxuan(x,list.get(x).isCheck());
                    }

                    myAdapter.notifyDataSetChanged();
                }else {
                    for (int x=0;x<list.size();x++){
                        list.get(x).setCheck(false);
                        quanxuan(x,list.get(x).isCheck());
                    }
                    myAdapter.notifyDataSetChanged();

                }
            }
        });

    }

    private void changePrice(){
             prices=0;
             nums=0;
            for(int x=0;x<list.size();x++){
                ShoppingBean.DataBean dataBean=list.get(x);

                if ( dataBean.isCheck()){
                     nums++;
                     prices+=list.get(x).getPrice()*list.get(x).getSalenum();
                }
            }


            tv_total.setText(prices+"");
    }

    public void jia(int i,TextView tv,Boolean ischeck){
        int salenum = list.get(i).getSalenum();
        salenum++;
        list.get(i).setSalenum(salenum);
        myAdapter.notifyDataSetChanged();
        changePrice();
    }

    public void jian(int i,TextView tv,Boolean ischeck){
        int salenum = list.get(i).getSalenum();
        if (salenum==1){
            return;
        }
        salenum--;
        list.get(i).setSalenum(salenum);
        myAdapter.notifyDataSetChanged();
        changePrice();

    }

    public void quanxuan(int i,boolean ischeck){
        ShoppingBean.DataBean dataBean = list.get(i);
        dataBean.setCheck(ischeck);
        changePrice();
    }
    @Override
    public void toBackHome(List<ShoppingBean.DataBean> list) {
        Message msg = new Message();
        msg.obj=list;
        Log.d("--", "toBackHome: "+list.size());
        handler.sendMessage(msg);

    }
}


dataview'-----------------------------------------------------------------------------------------------------------------------------------------------------


package com.example.com.shopping.view;

import com.example.com.shopping.moudle.Bean.ShoppingBean;

import java.util.List;

/**
 * Created by linmeihui on 2018/3/29.
 */

public interface DataView {

    void toBackHome( List<ShoppingBean.DataBean> list);

}


moudle层里datamoudle-----------------------------------------------------------------------------------------------------------------

package com.example.com.shopping.moudle;

import com.example.com.shopping.presenter.DataPresenter;

/**
 * Created by linmeihui on 2018/3/29.
 */

public interface DataMoudle {
    void getData(String url,DataPresenter presenter);
}


mydataview----------------------------------------------------------------------------------------------------------------------------------------


package com.example.com.shopping.moudle;

import com.example.com.shopping.Utils.OkhtttpUtils;
import com.example.com.shopping.moudle.Bean.ShoppingBean;
import com.example.com.shopping.presenter.DataPresenter;
import com.google.gson.Gson;

import java.io.IOException;
import java.util.List;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;

/**
 * Created by linmeihui on 2018/3/29.
 */

public class MyDataMoudle implements DataMoudle {
    //请求数据的
    @Override
    public void getData(String url, final DataPresenter presenter) {

        //请求数据
        OkhtttpUtils.doGet(url, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {

                String json = response.body().string();
                Gson gson = new Gson();
                ShoppingBean shoppingBean = gson.fromJson(json, ShoppingBean.class);

                //得到数据

                List<ShoppingBean.DataBean> list=shoppingBean.getData();

                //回调给p                presenter.success(list);

            }
        });

    }
}



presenter层里datapresenter


package com.example.com.shopping.presenter;

import com.example.com.shopping.moudle.Bean.ShoppingBean;

import java.util.List;

/**
 * Created by linmeihui on 2018/3/29.
 */

public interface DataPresenter {
    void success(List<ShoppingBean.DataBean> list);
    void error();
}



mydatapresenter--------------------------------------------------------------------------------------------------------------------------------


package com.example.com.shopping.presenter;

import com.example.com.shopping.moudle.Bean.ShoppingBean;
import com.example.com.shopping.moudle.MyDataMoudle;
import com.example.com.shopping.view.DataView;
import com.example.com.shopping.view.MainActivity;

import java.util.List;

/**
 * Created by linmeihui on 2018/3/29.
 */



public class MyDataPersenter implements DataPresenter {

    private MyDataMoudle myDataMoudle;
    DataView dataView;
    public MyDataPersenter(DataView dataView) {

        myDataMoudle=new MyDataMoudle();
        this.dataView=dataView;
    }

//Moudle层得到数据 传给view    @Override
    public void success(List<ShoppingBean.DataBean> list) {

        dataView.toBackHome(list);
    }

    @Override
    public void error() {

    }

    //请求数据的方法
    public void netWork(String dataUrl) {

        myDataMoudle.getData(dataUrl,this);

    }
}


utils工具类 okhttputils--------------------------------------------------------------------------------------------------------------------------------------------

package com.example.com.shopping.Utils;

import android.os.Environment;

import java.io.File;
import java.util.Map;
import java.util.concurrent.TimeUnit;

import okhttp3.Cache;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;

import static android.R.string.ok;
import static android.os.Build.VERSION_CODES.M;

/**
 * Created by Administrator on 2018/3/8.
 */

public class OkhtttpUtils {



    //单例模式,把构造方法进行私有化
    //
    private OkhtttpUtils(){};
    static  OkHttpClient client;


    public static OkHttpClient getInstance(){


        if (client==null) {
            //更加安全
            synchronized (OkhtttpUtils.class) {
                //缓存的地方     mnt/sdcard
                File file = new File(Environment.getExternalStorageDirectory(), "cache11");
                client = new OkHttpClient().newBuilder()
                        .readTimeout(3000, TimeUnit.SECONDS)   //设置读取超时时间
                        .connectTimeout(3000, TimeUnit.SECONDS) //设置连接的超时时间

                        .cache(new Cache(file, 10 * 1024))
                        .build();
            }
        }
        return client;
    }


    /**
     * get请求
     * Callback  是一个接口
     */
    public static void doGet(String url, Callback callback){

        //1:拿到okhttpclient  对像

        OkHttpClient client = getInstance();
        //2:进行请求的操作

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


    }

    //post请求

    /**
     *
     * @param url  请求的地址
     * @param parms   请求的参数
     * @param callback  callback
     */
    public static void doPost(String url, Map<String,String> parms,Callback callback){

        //得到客户端的对像
        OkHttpClient client = getInstance();

        //不是FormBody,而是一个Builder
        FormBody.Builder body = new FormBody.Builder();
        //key   value
        for (String key:parms.keySet()){
            //value的值
            body.add(key,parms.get(key));
        }
        Request request = new Request.Builder()
                .url(url)
                .post(body.build())
                .build();

        client.newCall(request).enqueue(callback);

    }

    //用来上传图片的

    //url  , 图片  ,参数    Callback
    public static  void upImage(String url,File file,String filenName,Map<String,String> params,Callback callback){

        OkHttpClient client = getInstance();


        //requestBody的实现类  Formbody
        MultipartBody.Builder builder = new MultipartBody.Builder();

        if (params!=null){
            for (String key :params.keySet()){
                builder.addFormDataPart(key,params.get(key));
            }
        }

        //设置类型
        builder.setType(MultipartBody.FORM);


        builder.addFormDataPart("file",filenName,RequestBody.create(MediaType.parse("application/octet-stream"),file));

      // builder.setType(MultipartBody.FORM);
     // builder.addFormDataPart("file",filenName,RequestBody.create(MediaType.parse("application/octet-stream"),file));
        //builder.addFormDataPart("file","aa.png",builder.build());

        Request request = new Request.Builder()
                .url(url)
                .post(builder.build())
                .build();

        client.newCall(request).enqueue(callback);


    }


}


myadapter------------------------------------------------------------------------------------------------------------------------------------

package com.example.com.shopping.adapter;

import android.content.Context;
import android.graphics.Bitmap;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.example.com.shopping.R;
import com.example.com.shopping.moudle.Bean.ShoppingBean;
import com.example.com.shopping.view.MainActivity;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;

import java.util.List;

/**
 * Created by linmeihui on 2018/3/29.
 */

public class MyAdapter extends BaseAdapter{
    Context context;
    List<ShoppingBean.DataBean> list;
     NumInterface numInterface;

    public MyAdapter(Context context, List<ShoppingBean.DataBean> list) {
        this.context = context;
        this.list = list;


    }
    public void setShopping(NumInterface numInterface){
            this.numInterface=numInterface;
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int i) {
        return list.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(final int i, View view, ViewGroup viewGroup) {
         final ViewHolder holder;
         if (view==null){
             view=View.inflate(context, R.layout.item,null);
             holder=new ViewHolder();
             holder.checkbox=view.findViewById(R.id.checkbox);
             holder.img=view.findViewById(R.id.img);
             holder.jia=view.findViewById(R.id.jia);
             holder.jian=view.findViewById(R.id.jian);
             holder.tv_num=view.findViewById(R.id.tv_num);
             holder.tv_price=view.findViewById(R.id.tv_price);
             holder.tv_title=view.findViewById(R.id.tv_title);
             holder.tv_total=view.findViewById(R.id.tv_total);

             view.setTag(holder);
         }else{
             holder= (ViewHolder) view.getTag();
         }
        String imageUrl ="https://img-my.csdn.net/uploads/201407/26/1406383264_4787.jpg";

          holder.tv_title.setText(list.get(i).getTitle());
          holder.tv_price.setText(list.get(i).getPrice()+"");
          holder.tv_num.setText(list.get(i).getSalenum()+"");

          holder.checkbox.setChecked(list.get(i).isCheck());
        Glide.with(context).load(imageUrl).into(holder.img);
        ShoppingBean.DataBean dataBean=list.get(i);

        if (dataBean.isCheck()){
            dataBean.setCheck(true);
        }else {
            dataBean.setCheck(false);
        }


        holder.checkbox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                list.get(i).setCheck(holder.checkbox.isChecked());

                numInterface.quanxuan(i,holder.checkbox.isChecked());

            }
        });


        holder.jia.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                numInterface.jia(i,holder.tv_num,holder.checkbox.isChecked());
            }
        });

        holder.jian.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                numInterface.jian(i,holder.tv_num,holder.checkbox.isChecked());
            }
        });

        return view;
    }

    class ViewHolder{
        CheckBox checkbox;
        Button jia,jian;
        TextView tv_title,tv_price,tv_num,tv_total;
        ImageView img;
    }

public interface NumInterface{
        void jia(int i,TextView tv,Boolean ischeck);
    void jian(int i,TextView tv,Boolean ischeck);
    void quanxuan(int i,boolean ischeck);
}

}










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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值