购物车的简单实现

下面是购物车MVP效果的简单实现

首先是布局

这是Activity_main布局


这个是Activity_goods布局

这是Activity_car布局


这是rv_item_car布局


这是rv_item_goods布局


接下来就是各个类的代码


MainActivity类

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 com.example.shoppingcard.adapter.GoodsRVAdaptet;
import com.example.shoppingcard.bean.Goods;
import com.example.shoppingcard.presenter.GoodsPresenter;
import com.example.shoppingcard.view.IHomeView;

import java.util.List;

public class MainActivity extends AppCompatActivity implements IHomeView<Goods>{

    RecyclerView rv;
    GoodsRVAdaptet adapter;

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

        GoodsPresenter presenter = new GoodsPresenter(this, this);
        presenter.showGoodsRV();
    }

    private void initView() {
        rv = (RecyclerView) findViewById(R.id.rv);
        btn = (Button) findViewById(R.id.btn_cart);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent i = new Intent(MainActivity.this, CartActivity.class);
                startActivity(i);
            }
        });
    }

    @Override
    public void setRVData(final List<Goods> list) {
        RecyclerView.LayoutManager manager = new LinearLayoutManager(this);
        rv.setLayoutManager(manager);
        adapter = new GoodsRVAdaptet(this, list);
        rv.setAdapter(adapter);
        adapter.setOnRVItemClickListener(new GoodsRVAdaptet.OnRVItemClickListener() {
            @Override
            public void onRVItemClick(View view, int position) {
                Intent i = new Intent(MainActivity.this, GoodsActivity.class);
                i.putExtra("goods", list.get(position));
                startActivity(i);
            }
        });
    }

    @Override
    public void refreshRV(List<Goods> list) {
        adapter.setData(list);
    }
}


GoodsActivity类


import android.content.ContentValues;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import com.example.shoppingcard.bean.CartGoods;
import com.example.shoppingcard.bean.Goods;
import com.example.shoppingcard.dao.GoodsDao;
import com.example.shoppingcard.utils.ConstantUtils;

public class GoodsActivity extends AppCompatActivity {

    TextView tv_goods,tv_price;
    Button btn_add;

    boolean isAdd = true;
    GoodsDao dao;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_goods);

        dao = GoodsDao.getInstance(this);
        Intent intent = getIntent();
        Goods goods = (Goods) intent.getSerializableExtra("goods");
        initView();
        setData(goods);
    }

    private void setData(final Goods goods) {

        tv_goods.setText(goods.getGname());
        tv_price.setText(goods.getPrice() + "");
        btn_add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                isAdd = true;
                if(ConstantUtils.list.size() > 0){
                    for (int i = 0; i < ConstantUtils.list.size(); i++) {
                        if(goods.getGid().equals(ConstantUtils.list.get(i).getGoods().getGid())){
                            isAdd = false;
                            int count = ConstantUtils.list.get(i).getCount();
                            ConstantUtils.list.get(i).setCount(count + 1);
                            ContentValues cv = new ContentValues();
                            cv.put("count" , count + 1);
                            dao.updata(cv, goods.getGid());
                            break;
                        }
                    }
                }
                if(isAdd){
                    CartGoods cg = new CartGoods();
                    cg.setGoods(goods);
                    cg.setCount(1);
                    ConstantUtils.list.add(cg);
                    ContentValues cv = new ContentValues();
                    cv.put("gid", goods.getGid());
                    cv.put("sid", goods.getSid());
                    cv.put("uid", goods.getUid());
                    cv.put("price", goods.getPrice());
                    cv.put("gname", goods.getGname());
                    cv.put("count", cg.getCount());
                    dao.insert(cv);
                }
            }
        });
    }

    private void initView() {
        tv_goods = (TextView) findViewById(R.id.tv_goods_name);
        tv_price = (TextView) findViewById(R.id.tv_goods_price);
        btn_add = (Button) findViewById(R.id.btn_add_cart);
    }
}



CarActivity类


import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;

import com.example.shoppingcard.adapter.CartRVAdaptet;
import com.example.shoppingcard.dao.GoodsDao;
import com.example.shoppingcard.utils.ConstantUtils;

public class CartActivity extends AppCompatActivity {

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

        if(ConstantUtils.list.size() == 0){
            ConstantUtils.list = GoodsDao.getInstance(this).queyrAll();
        }
        initView();
    }

    private void initView() {
        rv_cart = (RecyclerView) findViewById(R.id.rv_cart);
        RecyclerView.LayoutManager manager = new LinearLayoutManager(this);
        rv_cart.setLayoutManager(manager);
        CartRVAdaptet adapter = new CartRVAdaptet(this);
        rv_cart.setAdapter(adapter);
    }

}


接下来的各个需要的包

依次是:

adapter包内

GoodsRVAdapter类

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

import com.example.shoppingcard.R;
import com.example.shoppingcard.bean.Goods;

import java.util.List;

/**
 * Created by yfeng on 2017/10/21.
 */

public class GoodsRVAdaptet extends RecyclerView.Adapter<GoodsRVAdaptet.GoodsHolder>{

    Context context;
    List<Goods> list;

    public GoodsRVAdaptet(Context context, List<Goods> list) {
        this.context = context;
        this.list = list;
    }

    public void setData(List<Goods> list){
        this.list = list;
        notifyDataSetChanged();
    }

    @Override
    public GoodsHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = View.inflate(context,R.layout.rv_item_goods,null);
        GoodsHolder holder = new GoodsHolder(v);
        return holder;
    }

    @Override
    public void onBindViewHolder(GoodsHolder holder, final int position) {
        holder.tv_name.setText(list.get(position).getGname());
        holder.tv_price.setText(list.get(position).getPrice() + "元");
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                listener.onRVItemClick(view, position);
            }
        });
    }

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

    class GoodsHolder extends RecyclerView.ViewHolder{

        TextView tv_name;
        TextView tv_price;
        public GoodsHolder(View itemView) {
            super(itemView);
            tv_name = itemView.findViewById(R.id.tv_goods_name);
            tv_price = itemView.findViewById(R.id.tv_goods_price);
        }
    }

    private OnRVItemClickListener listener;
    public void setOnRVItemClickListener(OnRVItemClickListener listener){
        this.listener = listener;
    }

    public interface OnRVItemClickListener{
        public void onRVItemClick(View view, int position);
    }
}
CarRVAdapter类

import android.content.ContentValues;
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.TextView;

import com.example.shoppingcard.R;
import com.example.shoppingcard.bean.CartGoods;
import com.example.shoppingcard.dao.GoodsDao;
import com.example.shoppingcard.utils.ConstantUtils;

import java.util.List;

/**
 * Created by yfeng on 2017/10/21.
 */

public class CartRVAdaptet extends RecyclerView.Adapter<CartRVAdaptet.CartHolder>{

    Context context;

    public CartRVAdaptet(Context context) {
        this.context = context;
    }

    public void setData(List<CartGoods> list){
        notifyDataSetChanged();
    }

    @Override
    public CartHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = View.inflate(context,R.layout.rv_item_cart,null);
        CartHolder holder = new CartHolder(v);
        return holder;
    }

    @Override
    public void onBindViewHolder(CartHolder holder, final int position) {
        holder.tv_name.setText(ConstantUtils.list.get(position).getGoods().getGname());
        holder.tv_price.setText(ConstantUtils.list.get(position).getGoods().getPrice() + "元");
        holder.tv_count.setText(ConstantUtils.list.get(position).getCount() + "");
        holder.btn_add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int count = ConstantUtils.list.get(position).getCount() + 1;
                ContentValues cv = new ContentValues();
                cv.put("count", count);
                GoodsDao.getInstance(context).updata(cv, ConstantUtils.list.get(position).getGoods().getGid());
                notifyItemChanged(position);
            }
        });
        holder.btn_sub.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int count = ConstantUtils.list.get(position).getCount();
                if(count > 0){
                    ContentValues cv = new ContentValues();
                    cv.put("count", count - 1);
                    GoodsDao.getInstance(context).updata(cv, ConstantUtils.list.get(position).getGoods().getGid());
                    notifyItemChanged(position);
                }
            }
        });
    }

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

    class CartHolder extends RecyclerView.ViewHolder{

        TextView tv_name;
        TextView tv_price;
        TextView tv_count;
        Button btn_add, btn_sub;
        public CartHolder(View itemView) {
            super(itemView);
            tv_name = itemView.findViewById(R.id.tv_goods_name);
            tv_price = itemView.findViewById(R.id.tv_goods_price);
            tv_count = itemView.findViewById(R.id.tv_count);
            btn_add = itemView.findViewById(R.id.btn_add);
            btn_sub = itemView.findViewById(R.id.btn_sub);
        }
    }
}


view包

IHomeVIew类


public interface IHomeView<T> {
    public void setRVData(List<T> list);
    public void refreshRV(List<T> list);
}


Utils包


ConstantUtils类

public class ConstantUtils {
    public static List<CartGoods> list = new ArrayList<>();
}


presenter包

GoodsPresenter类

import com.example.shoppingcard.bean.Goods;
import com.example.shoppingcard.model.GoodsModel;
import com.example.shoppingcard.model.IGoodsModel;
import com.example.shoppingcard.view.IHomeView;

import java.util.List;

/**
 * Created by yfeng on 2017/10/21.
 */

public class GoodsPresenter {
    IGoodsModel model;
    IHomeView view;
    Context context;

    public GoodsPresenter(IHomeView view, Context context) {
        this.view = view;
        this.context = context;
        this.model = new GoodsModel();
    }

    public void showGoodsRV(){
        List<Goods> list = model.getData();
        view.setRVData(list);
    }
}



okhttp包


OkHttpUtils类

public class OkHttpUtils {
    private Handler handler = new Handler();
    public synchronized Handler getHandler(){
        return handler;
    }
    private static OkHttpUtils okHttpUtils = new OkHttpUtils();
    private OkHttpUtils(){}
    public synchronized static OkHttpUtils getInstance(){
        return okHttpUtils;
    }

    private OkHttpClient client = null;
    private synchronized void initOkClientInstance(){
        client = new OkHttpClient.Builder().build();
    }

    public void doGet(String url, Callback callback){
        initOkClientInstance();
        Request request = new Request.Builder().url(url).build();
        Call call = client.newCall(request);
        call.enqueue(callback);
    }
}

OnUICallBack类

public abstract class OnUICallBack implements Callback{

    private Handler handler = OkHttpUtils.getInstance().getHandler();

    public abstract void onFailed(Call call, IOException e);

    public abstract void onSuccess(Call call, Response response) throws IOException ;

    @Override
    public void onFailure(final Call call, final IOException e) {
        handler.post(new Runnable() {
            @Override
            public void run() {
                onFailed(call, e);
            }
        });

    }

    @Override
    public void onResponse(final Call call, final Response response) throws IOException {
        handler.post(new Runnable() {
            @Override
            public void run() {
                try {
                    Log.i("==========", "run: " + Thread.currentThread() + Thread.currentThread().getName() + Thread.currentThread().getId());
                    onSuccess(call, response);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });
    }
}


Model包


GoodsModel类

public class GoodsModel implements IGoodsModel {
    @Override
    public List<Goods> getData() {
//        OkHttpUtils.getInstance().doGet("");
        List<Goods> list = new ArrayList<>();
        Random r = new Random();
        for (int i = 0; i < 100; i++) {
            Goods g = new Goods();
            g.setGname("商品" + i);
            g.setPrice(i + (double)r.nextInt(10)/100);
            g.setSid("s" + i);
            g.setUid("yy");
            g.setGid("g" + i);
            list.add(g);
        }
        return list;
    }
}


IGoodsModel类


public interface IGoodsModel<T> {
    public List<T> getData();
}

db包

MySQLiteOpenHelper类

public class MySQLiteOpenHelper extends SQLiteOpenHelper{
    public MySQLiteOpenHelper(Context context) {
        super(context, "taobao.db", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        String sql = "create table goods(id integer auto increment primary key , sid varchar, gid varchar, uid varchar, gname varchar, count integer, price double)";
        sqLiteDatabase.execSQL(sql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }
}

dao包

GoodsDao类

public class GoodsDao {
    private static MySQLiteOpenHelper helper;
    private static final String TABLE_NAME = "goods";

    private static GoodsDao dao = new GoodsDao();
    private GoodsDao(){
    };
    public static GoodsDao getInstance(Context context){
        if(helper == null){
            helper = new MySQLiteOpenHelper(context);
        }
        return dao;
    }

    public void insert(ContentValues cv){
        SQLiteDatabase db = helper.getWritableDatabase();
        db.insert(TABLE_NAME, null, cv);
        db.close();
        ConstantUtils.list = queyrAll();
    }

    public void updata(ContentValues cv, String gid){
        SQLiteDatabase db = helper.getWritableDatabase();
        db.update(TABLE_NAME, cv, "gid = ?", new String[]{gid});
        db.close();
        ConstantUtils.list = queyrAll();
    }

    public List<CartGoods> queyrAll(){
        List<CartGoods> goodsList = new ArrayList<>();
        SQLiteDatabase db = helper.getReadableDatabase();
        Cursor cursor = db.query(TABLE_NAME,null,null,null,null,null,null);
        while(cursor.moveToNext()){
            Goods g = new Goods();
            g.setGname(cursor.getString(cursor.getColumnIndex("gname")));
            g.setGid(cursor.getString(cursor.getColumnIndex("gid")));
            g.setSid(cursor.getString(cursor.getColumnIndex("sid")));
            g.setUid(cursor.getString(cursor.getColumnIndex("uid")));
            g.setPrice(cursor.getDouble(cursor.getColumnIndex("price")));
            CartGoods cg = new CartGoods();
            cg.setCount(cursor.getInt(cursor.getColumnIndex("count")));
            cg.setGoods(g);
            goodsList.add(cg);
        }
        db.close();
        return goodsList;

    }

}


bean包

Goods类

public class Goods implements Serializable {
    private String gname;
    private String gid;//商品id
    private String sid;//商家id
    private String uid;//用户id
    private double price;


    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public String getGname() {
        return gname;
    }

    public void setGname(String gname) {
        this.gname = gname;
    }

    public String getGid() {
        return gid;
    }

    public void setGid(String gid) {
        this.gid = gid;
    }

    public String getSid() {
        return sid;
    }

    public void setSid(String sid) {
        this.sid = sid;
    }

    public String getUid() {
        return uid;
    }

    public void setUid(String uid) {
        this.uid = uid;
    }

    @Override
    public String toString() {
        return "Goods{" +
                "gname='" + gname + '\'' +
                ", gid='" + gid + '\'' +
                ", sid='" + sid + '\'' +
                ", uid='" + uid + '\'' +
                ", price=" + price +
                '}';
    }
}



CartGoods类


public class CartGoods {
    Goods goods;
    private int count;
    private boolean flag;//true:网络购物车中取回的商品, false:没登录时添加过的商品

    public Goods getGoods() {
        return goods;
    }

    public void setGoods(Goods goods) {
        this.goods = goods;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    public boolean isFlag() {
        return flag;
    }

    public void setFlag(boolean flag) {
        this.flag = flag;
    }

    @Override
    public String toString() {
        return "CardGoods{" +
                "goods=" + goods +
                ", count=" + count +
                ", flag=" + flag +
                '}';
    }
}

以上就是这次购物车简单实现的代码,和大家分享一下,同时也希望各位大牛提供一些意见

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值