矽谷商城3--購物車資料存放區器,3--購物車
1_建立購物車類ShoppingCart
作用:購物車類繼承Wares,記錄某個商品在購物車中的狀態,例如有多少個商品,是否選中
public class ShoppingCart extends SmartServicePagerBean.Wares implements Serializable{ /** * 購買的數量 */ private int count = 1; /** * 是否勾選 */ private boolean isCheck = true; public int getCount() { return count; } public void setCount(int count) { this.count = count; } public boolean isCheck() { return isCheck; } public void setIsCheck(boolean isCheck) { this.isCheck = isCheck; } @Override public String toString() { return "ShoppingCart{" + "count=" + count + ", isCheck=" + isCheck + '}'; }}2_建立資料存放區類CartProvider
作用:資料存放區類,儲存資料;儲存資料--把集合轉成String類型儲存(Gson);取資料--把String轉換成列表資料(Gson)
public class CartProvider { public static final String JSON_CART = "json_cart"; private final Context context; /** * SparseArray替換HashMap,效能好於HashMap */ private SparseArray<ShoppingCart> datas; public CartProvider(Context context) { this.context = context; datas = new SparseArray<>(10); listToSparse(); } private void listToSparse() { List<ShoppingCart> carts = getAllData(); if (carts != null && carts.size() > 0) { for (int i = 0; i < carts.size(); i++) { ShoppingCart cart = carts.get(i); datas.put(cart.getId(), cart); } } } /** * 得到所有資料 * * @return */ public List<ShoppingCart> getAllData() { return getDataFromLocal(); } /** * 從本地擷取json資料,並且通過Gson解析成List列表資料 * * @return */ private List<ShoppingCart> getDataFromLocal() { List<ShoppingCart> carts = new ArrayList<>(); //從本地擷取緩衝的資料 String saveJson = CacheUtils.getString(context, JSON_CART); if (!TextUtils.isEmpty(saveJson)) { //通過Gson把資料轉換成List列表 carts = new Gson().fromJson(saveJson, new TypeToken<List<ShoppingCart>>() { }.getType()); } return carts; } /** * 增加資料 * * @param cart */ public void addData(ShoppingCart cart) { //1.添加資料 ShoppingCart tempCart = datas.get(cart.getId()); if (tempCart != null) { //在列表中已經存在該條資料 tempCart.setCount(tempCart.getCount()+1); }else{ tempCart = cart; tempCart.setCount(1); } datas.put(tempCart.getId(),tempCart); //2.儲存資料 commit(); } /** * 儲存資料 */ private void commit() { //1.把SparseArray轉換成List List<ShoppingCart> carts = parsesToList(); //2.用Gson把List轉換成String String json = new Gson().toJson(carts); //3.儲存資料 CacheUtils.putString(context, JSON_CART, json); } /** * 從parses的資料轉換成List列表資料 * @return */ private List<ShoppingCart> parsesToList() { List<ShoppingCart> carts = new ArrayList<>(); if(datas != null && datas.size() >0){ for (int i=0;i<datas.size();i++){ ShoppingCart cart = datas.valueAt(i); carts.add(cart); } } return carts; } /** * 刪除資料 * * @param cart */ public void deleteData(ShoppingCart cart) { //1.刪除資料 datas.delete(cart.getId()); //2.儲存資料 commit(); } /** * 修改資料 * @param cart */ public void updataData(ShoppingCart cart) { //1.修改-count datas.put(cart.getId(), cart); //2.儲存資料 commit(); } /** * 把商品Wares轉換成ShoppingCart */ public ShoppingCart conversion(SmartServicePagerBean.Wares wares) { ShoppingCart cart = new ShoppingCart(); cart.setImgUrl(wares.getImgUrl()); cart.setDescription(wares.getDescription()); cart.setName(wares.getName()); cart.setId(wares.getId()); cart.setSale(wares.getSale()); cart.setPrice(wares.getPrice()); return cart; }}3.商城熱賣的適配器中點擊添加到購物車儲存類
//1.根據位置得到對應的資料final SmartServicePagerBean.Wares wares = datas.get(position);.....//設定點擊事件在這裡可以holder.btn_buy.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//把商品轉換成ShoppingCartShoppingCart cart = cartProvider.conversion(wares);cartProvider.addData(cart);Toast.makeText(context, "添加成功", Toast.LENGTH_SHORT).show();}});