购物车参考
来源:互联网 发布:网络侦探贝尔菲兽进化 编辑:程序博客网 时间:2024/06/06 23:51
main主布局 导入RecyclerView依赖<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <RelativeLayout android:id="@+id/rl_shopcart_have" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="500dp"> </android.support.v7.widget.RecyclerView> </LinearLayout> <LinearLayout android:id="@+id/ll_pay" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:color/white" android:gravity="center_vertical" android:orientation="horizontal" android:layout_alignParentBottom="true"> <TextView android:id="@+id/allselect" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:drawableLeft="@drawable/shopcart_selected" android:drawablePadding="5dp" android:text="全选" /> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="vertical" android:layout_alignParentBottom="true"> <TextView android:id="@+id/tv_shopcart_totalprice" android:layout_width="150dp" android:layout_height="wrap_content" android:paddingLeft="10dp" android:paddingTop="10dp" android:text="总价:¥0" android:textColor="@android:color/holo_red_dark" android:textSize="16sp" /> <TextView android:id="@+id/tv_Allnum" android:layout_width="100dp" android:layout_height="wrap_content" android:paddingBottom="10dp" android:paddingLeft="10dp" android:text="共0件商品" android:textSize="14sp" /> </LinearLayout> <TextView android:id="@+id/jiesuan" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="10dp" android:background="@android:color/holo_red_light" android:paddingBottom="10dp" android:paddingLeft="30dp" android:paddingRight="30dp" android:paddingTop="10dp" android:text="去结算" android:textColor="@android:color/white" android:layout_alignParentBottom="true"/> </LinearLayout> </RelativeLayout></LinearLayout>
item条目 把图片放在drawable-xhdpi<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:color/white"> <LinearLayout android:id="@+id/ll_shopcart_header" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical" > <ImageView android:id="@+id/img_select" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/shopcart_selected" android:paddingLeft="15dp" android:paddingRight="15dp" android:paddingTop="10dp" android:paddingBottom="10dp" /> <TextView android:id="@+id/tv_shopName" android:layout_width="match_parent" android:layout_height="wrap_content" android:drawableLeft="@drawable/shopcart_shop" android:text="商家" android:padding="10dp" android:drawablePadding="5dp" /> </LinearLayout> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#f6f6f6" ></View> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/shopcart_selected" android:layout_marginLeft="15dp" android:layout_marginRight="15dp" android:visibility="invisible" /> <TextView android:id="@+id/tv_content" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="价格描述的内容" android:paddingLeft="10dp" android:paddingTop="10dp" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="center_vertical" > <ImageView android:id="@+id/iv_smallSelect" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/shopcart_selected" android:padding="15dp" /> <ImageView android:id="@+id/iv_img" android:layout_width="60dp" android:layout_height="60dp" android:layout_margin="10dp" android:src="@mipmap/ic_launcher" /> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="vertical" > <TextView android:id="@+id/tv_price" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="¥185" android:layout_marginLeft="50dp" android:textColor="#e53e42" android:textSize="14sp" android:layout_marginBottom="10dp" /> <LinearLayout android:layout_marginTop="5dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:layout_marginLeft="50dp"> <ImageView android:id="@+id/iv_jian" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/shopcart_minus_grey" /> <TextView android:id="@+id/tv_num" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingTop="2dp" android:paddingBottom="2dp" android:paddingLeft="20dp" android:paddingRight="20dp" android:layout_marginLeft="5dp" android:text="1" /> <ImageView android:id="@+id/iv_jia" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/shopcart_add_red" android:layout_marginLeft="5dp" /> </LinearLayout> </LinearLayout> <Button android:id="@+id/iv_delete" android:layout_width="50dp" android:layout_height="35dp" android:padding="5dp" android:text="删除" android:textColor="@android:color/white" android:background="@android:color/holo_red_light" android:src="@drawable/shopcart_delete" /> </LinearLayout> </LinearLayout> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#f6f6f6" ></View></LinearLayout>Bean类ShopCartBean导入List包/** * shopId : 2 * shopName : null * cartlist : [{"id":2,"shopId":2,"shopName":null,"productId":2,"productName":null,"color":null,"size":null,"price":null,"count":null}] */ private int shopId; private Object shopName; /** * id : 2 * shopId : 2 * shopName : null * productId : 2 * productName : null * color : null * size : null * price : null * count : null */ private List<CartlistBean> cartlist; public int getShopId() { return shopId; } public void setShopId(int shopId) { this.shopId = shopId; } public Object getShopName() { return shopName; } public void setShopName(Object shopName) { this.shopName = shopName; } public List<CartlistBean> getCartlist() { return cartlist; } public void setCartlist(List<CartlistBean> cartlist) { this.cartlist = cartlist; } public static class CartlistBean { private int id; private int shopId; private String shopName; private int productId; private String productName; private String color; private String size; private String price; private String defaultPic; private int count; private boolean isSelect = true; private int isFirst = 2; private boolean isShopSelect = true; public String getDefaultPic() { return defaultPic; } public void setDefaultPic(String defaultPic) { this.defaultPic = defaultPic; } public boolean getIsShopSelect() { return isShopSelect; } public void setShopSelect(boolean shopSelect) { isShopSelect = shopSelect; } public int getIsFirst() { return isFirst; } public void setIsFirst(int isFirst) { this.isFirst = isFirst; } public boolean getIsSelect() { return isSelect; } public void setSelect(boolean select) { isSelect = select; } public int getId() { return id; } public void setId(int id) { this.id = id; } public int getShopId() { return shopId; } public void setShopId(int shopId) { this.shopId = shopId; } public String getShopName() { return shopName; } public void setShopName(String shopName) { this.shopName = shopName; } public int getProductId() { return productId; } public void setProductId(int productId) { this.productId = productId; } public String getProductName() { return productName; } public void setProductName(String productName) { this.productName = productName; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public String getSize() { return size; } public void setSize(String size) { this.size = size; } public String getPrice() { return price; } public void setPrice(String price) { this.price = price; } public int getCount() { return count; } public void setCount(int count) { this.count = count; } }创建适配器ShopCartAdapter导包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.Button;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;import android.widget.Toast;import com.bumptech.glide.Glide;import java.util.List;public class ShopCartAdapter extends RecyclerView.Adapter<ShopCartAdapter.MyViewHolder>{ private Context context; private List<ShopCartBean.CartlistBean> data; private View headerView; private OnDeleteClickListener mOnDeleteClickListener; private OnEditClickListener mOnEditClickListener; private OnResfreshListener mOnResfreshListener; public ShopCartAdapter(Context context, List<ShopCartBean.CartlistBean> data){ this.context = context; this.data = data; } @Override public ShopCartAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view; view = LayoutInflater.from(context).inflate(R.layout.item_car, parent, false); return new ShopCartAdapter.MyViewHolder(view); } @Override public void onBindViewHolder(final ShopCartAdapter.MyViewHolder holder, final int position) { Glide.with(context).load(data.get(position).getDefaultPic()).into(holder.img); if (position > 0) { if (data.get(position).getShopId() == data.get(position - 1).getShopId()) { holder.llShopCartHeader.setVisibility(View.GONE); } else { holder.llShopCartHeader.setVisibility(View.VISIBLE); } }else { holder.llShopCartHeader.setVisibility(View.VISIBLE); } holder.content.setText(data.get(position).getProductName()); holder.shopName.setText(data.get(position).getShopName()); holder.price.setText("¥" + data.get(position).getPrice()); holder.num.setText(data.get(position).getCount() + ""); if(mOnResfreshListener != null){ boolean isSelect = false; for(int i = 0;i < data.size(); i++){ if(!data.get(i).getIsSelect()){ isSelect = false; break; }else{ isSelect = true; } } mOnResfreshListener.onResfresh(isSelect); } holder.jian.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(data.get(position).getCount() > 1) { int count = data.get(position).getCount() - 1; if (mOnEditClickListener != null) { mOnEditClickListener.onEditClick(position, data.get(position).getId(), count); } data.get(position).setCount(count); notifyDataSetChanged(); } } }); holder.jia.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int count = data.get(position).getCount() + 1; if(mOnEditClickListener != null){ mOnEditClickListener.onEditClick(position,data.get(position).getId(),count); } data.get(position).setCount(count); notifyDataSetChanged(); } }); //商家选中状态图片 if(data.get(position).getIsSelect()){ holder.smallSelect.setImageDrawable(context.getResources().getDrawable(R.drawable.shopcart_selected)); }else { holder.smallSelect.setImageDrawable(context.getResources().getDrawable(R.drawable.shopcart_unselected)); } //商品选中状态图片 if(data.get(position).getIsShopSelect()){ holder.select.setImageDrawable(context.getResources().getDrawable(R.drawable.shopcart_selected)); }else { holder.select.setImageDrawable(context.getResources().getDrawable(R.drawable.shopcart_unselected)); } holder.delete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //调用删除的接口 Delete(v,position); } }); holder.smallSelect.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { data.get(position).setSelect(!data.get(position).getIsSelect()); //通过循环找出不同商铺的第一个商品的位置 for(int i = 0;i < data.size(); i++){ if(data.get(i).getIsFirst() == 1) { //遍历去找出同一家商铺的所有商品的勾选情况 for(int j = 0;j < data.size();j++){ //如果是同一家商铺的商品,并且其中一个商品是未选中,那么商铺的全选勾选取消 if(data.get(j).getShopId() == data.get(i).getShopId() && !data.get(j).getIsSelect()){ data.get(i).setShopSelect(false); break; }else{ //如果是同一家商铺的商品,并且所有商品是选中,那么商铺的选中全选勾选 data.get(i).setShopSelect(true); } } } } notifyDataSetChanged(); } }); holder.select.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(data.get(position).getIsFirst() == 1) { data.get(position).setShopSelect(!data.get(position).getIsShopSelect()); for(int i = 0;i < data.size();i++){ if(data.get(i).getShopId() == data.get(position).getShopId()){ data.get(i).setSelect(data.get(position).getIsShopSelect()); } } notifyDataSetChanged(); } } }); } private void Delete(final View view, final int position){ //调用删除某个规格商品的接口 if(mOnDeleteClickListener != null){ mOnDeleteClickListener.onDeleteClick(view,position,data.get(position).getId()); } data.remove(position); Toast.makeText(context, "删除成功", Toast.LENGTH_SHORT).show(); //重新排序,标记所有商品不同商铺第一个的商品位置 MainActivity.isSelectFirst(data); notifyDataSetChanged(); } @Override public int getItemCount() { int count = (data == null ? 0 : data.size()); if(headerView != null){ count++; } return count; } class MyViewHolder extends RecyclerView.ViewHolder { private ImageView select;//CheckBox private TextView shopName;//商家名字 private TextView content;//商品内容 private TextView price;//商品价格 private TextView num;//商品数量 private ImageView smallSelect;//小CheckBox private ImageView jian;//减 private ImageView jia;//加 private Button delete;//删除 private ImageView img;//商品图片 private LinearLayout llShopCartHeader; public MyViewHolder(View view) { super(view); llShopCartHeader = (LinearLayout) view.findViewById(R.id.ll_shopcart_header); select = (ImageView) view.findViewById(R.id.img_select); shopName = (TextView) view.findViewById(R.id.tv_shopName); content = (TextView) view.findViewById(R.id.tv_content); price = (TextView) view.findViewById(R.id.tv_price); num = (TextView) view.findViewById(R.id.tv_num); smallSelect = (ImageView) view.findViewById(R.id.iv_smallSelect); jian = (ImageView) view.findViewById(R.id.iv_jian); jia = (ImageView) view.findViewById(R.id.iv_jia); img = (ImageView) view.findViewById(R.id.iv_img); delete = (Button) view.findViewById(R.id.iv_delete); } } public View getHeaderView(){ return headerView; } private ShopCartAdapter.OnItemClickListener mOnItemClickListener; public interface OnItemClickListener{ void onItemClick(View view, int position); } public void setOnItemClickListener(ShopCartAdapter.OnItemClickListener mOnItemClickListener){ this.mOnItemClickListener = mOnItemClickListener; } public interface OnDeleteClickListener{ void onDeleteClick(View view, int position, int cartid); } public void setOnDeleteClickListener(OnDeleteClickListener mOnDeleteClickListener){ this.mOnDeleteClickListener = mOnDeleteClickListener; } public interface OnEditClickListener{ void onEditClick(int position, int cartid, int count); } public void setOnEditClickListener(OnEditClickListener mOnEditClickListener){ this.mOnEditClickListener = mOnEditClickListener; } public interface OnResfreshListener{ void onResfresh(boolean isSelect); } public void setResfreshListener(OnResfreshListener mOnResfreshListener){ this.mOnResfreshListener = mOnResfreshListener; }}MainActivity类导包import android.graphics.drawable.Drawable;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.view.View;import android.widget.LinearLayout;import android.widget.RelativeLayout;import android.widget.TextView;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;import java.io.IOException;import java.util.ArrayList;import java.util.List;import licancan.com.recyclerviewcar.adapter.ShopCartAdapter;import licancan.com.recyclerviewcar.api.Api;import licancan.com.recyclerviewcar.bean.ShopCartBean;import licancan.com.recyclerviewcar.utils.OkHttpUtils;import okhttp3.Call;import okhttp3.Callback;import okhttp3.FormBody;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response;public class MainActivity extends AppCompatActivity { private TextView jiesuan,allselect,tv_Allnum; private RecyclerView recyclerView; private ShopCartAdapter adapter; private List<ShopCartBean.CartlistBean> mAllOrderList = new ArrayList<>(); private ArrayList<ShopCartBean.CartlistBean> mGoPayList = new ArrayList<>(); private List<String> mHotProductsList = new ArrayList<>(); private TextView CarAllPrice; private int mCount,mPosition; private float allPrice; private boolean mSelect; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initData(); initMyData(); //创建LinearLayoutManager管理器 recyclerView.setLayoutManager(new LinearLayoutManager(this)); //创建适配器 关联适配器 adapter = new ShopCartAdapter(this,mAllOrderList); recyclerView.setAdapter(adapter); //删除商品接口 adapter.setOnDeleteClickListener(new ShopCartAdapter.OnDeleteClickListener() { @Override public void onDeleteClick(View view, int position,int cartid) { adapter.notifyDataSetChanged(); } }); //修改数量接口 adapter.setOnEditClickListener(new ShopCartAdapter.OnEditClickListener() { @Override public void onEditClick(int position, int cartid, int count) { mCount = count; mPosition = position; } }); //判断全选按钮 adapter.setResfreshListener(new ShopCartAdapter.OnResfreshListener() { @Override public void onResfresh( boolean isSelect) { mSelect = isSelect; if(isSelect){ Drawable left = getResources().getDrawable(R.drawable.shopcart_selected); allselect.setCompoundDrawablesWithIntrinsicBounds(left,null,null,null); }else { Drawable left = getResources().getDrawable(R.drawable.shopcart_unselected); allselect.setCompoundDrawablesWithIntrinsicBounds(left,null,null,null); } float allPrice = 0; int allNum = 0; allPrice = 0; mGoPayList.clear(); for(int i = 0;i < mAllOrderList.size(); i++) if(mAllOrderList.get(i).getIsSelect()) { allPrice += Float.parseFloat(mAllOrderList.get(i).getPrice()) * mAllOrderList.get(i).getCount(); allNum += 1; mGoPayList.add(mAllOrderList.get(i)); } allPrice = allPrice; CarAllPrice.setText("总价:" + allPrice); tv_Allnum.setText("共" + allNum + "件商品"); jiesuan.setText("结算"+"("+allNum+")"); } }); //全选 allselect.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mSelect = !mSelect; if(mSelect){ Drawable left = getResources().getDrawable(R.drawable.shopcart_selected); allselect.setCompoundDrawablesWithIntrinsicBounds(left,null,null,null); for(int i = 0;i < mAllOrderList.size();i++){ mAllOrderList.get(i).setSelect(true); mAllOrderList.get(i).setShopSelect(true); } }else{ Drawable left = getResources().getDrawable(R.drawable.shopcart_unselected); allselect.setCompoundDrawablesWithIntrinsicBounds(left,null,null,null); for(int i = 0;i < mAllOrderList.size();i++){ mAllOrderList.get(i).setSelect(false); mAllOrderList.get(i).setShopSelect(false); } } adapter.notifyDataSetChanged(); } }); adapter.notifyDataSetChanged(); } /** * 初始化控件 */ private void initView() { allselect = (TextView) findViewById(R.id.allselect); CarAllPrice = (TextView) findViewById(R.id.tv_shopcart_totalprice); tv_Allnum = (TextView) findViewById(R.id.tv_Allnum); recyclerView = (RecyclerView) findViewById(R.id.recyclerView); jiesuan = (TextView) findViewById(R.id.jiesuan); } private void initData() { OkHttpUtils.doGet(Api.URL, new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { String result = response.body().string(); } }); } private void initMyData(){ for(int i = 0;i < 2;i ++){ ShopCartBean.CartlistBean sb = new ShopCartBean.CartlistBean(); sb.setShopId(1); sb.setPrice("5199.0"); sb.setDefaultPic("https://m.360buyimg.com/n0/jfs/t6700/155/2098998076/156185/6cf95035/595dd5a5Nc3a7dab5.jpg!q70.jpg"); sb.setProductName("Apple iPhone 8 Plus (A1864) 64GB 金色 移动联通电信4G手机"); sb.setShopName("商家1"); sb.setCount(1); mAllOrderList.add(sb); } for(int i = 0;i < 1;i ++){ ShopCartBean.CartlistBean sb = new ShopCartBean.CartlistBean(); sb.setShopId(2); sb.setPrice("272.0"); sb.setDefaultPic("https://m.360buyimg.com/n0/jfs/t9004/210/1160833155/647627/ad6be059/59b4f4e1N9a2b1532.jpg"); sb.setProductName("北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"); sb.setShopName("商家6"); sb.setCount(1); mAllOrderList.add(sb); } for(int i = 0;i < 2;i ++){ ShopCartBean.CartlistBean sb = new ShopCartBean.CartlistBean(); sb.setShopId(3); sb.setPrice("2434.0"); sb.setDefaultPic("https://m.360buyimg.com/n0/jfs/t9106/106/1785172479/537280/253bc0ab/59bf78a7N057e5ff7.jpg"); sb.setProductName("小米(MI) 小米MIX2 手机 黑色 全网通 (6GB+64GB)【标配版】"); sb.setShopName("商家8"); sb.setCount(1); mAllOrderList.add(sb); } for(int i = 0;i < 1;i ++){ ShopCartBean.CartlistBean sb = new ShopCartBean.CartlistBean(); sb.setShopId(4); sb.setPrice("4362.0"); sb.setDefaultPic("https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg"); sb.setProductName("全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"); sb.setShopName("商家10"); sb.setCount(1); mAllOrderList.add(sb); } /*OkHttpClient ok = new OkHttpClient.Builder().build(); FormBody.Builder fb = new FormBody.Builder(); fb.add("uid","148"); FormBody build = fb.build(); Request re = new Request.Builder().post(build).url("http://120.27.23.105/product/getCarts") .build(); ok.newCall(re).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { String string = response.body().string(); System.out.println("string = " + string); try { JSONObject json = new JSONObject(string); JSONArray data = json.getJSONArray("data"); for (int i = 0; i <data.length() ; i++) { ShopCartBean.CartlistBean sb = new ShopCartBean.CartlistBean(); JSONObject o = (JSONObject) data.get(i); String name = o.optString("sellerName"); int sellerid = o.optInt("sellerid"); sb.setShopId(sellerid); sb.setShopName(name); JSONArray list = o.optJSONArray("list"); for (int j = 0; j <list.length() ; j++) { JSONObject o1 = (JSONObject) list.get(j); String images = o1.getString("images").split("\\|")[0]; String title = o1.optString("title"); String price = o1.optString("price"); sb.setDefaultPic(images); sb.setProductName(title); sb.setPrice(price); System.out.println("title = +======" + title); mAllOrderList.add(sb); } } } catch (JSONException e) { e.printStackTrace(); } } });*/ isSelectFirst(mAllOrderList); } public static void isSelectFirst(List<ShopCartBean.CartlistBean> list){ if(list.size() > 0) { list.get(0).setIsFirst(1); for (int i = 1; i < list.size(); i++) { if (list.get(i).getShopId() == list.get(i - 1).getShopId()) { list.get(i).setIsFirst(2); } else { list.get(i).setIsFirst(1); } } } }}
阅读全文
0 0
- 购物车参考
- asp.net购物车 参考链接
- 购物车
- 购物车
- 购物车
- 购物车
- 购物车
- 购物车
- 购物车
- 购物车
- 购物车
- 购物车
- 购物车
- 购物车
- 购物车
- 购物车
- 购物车
- 购物车
- CentOS7安装使用Docker
- android中怎么在文字两边划线
- listView适配器之BaseAdapter详解
- 深度剖析关于Js中对象的研究
- windows C盘 增加容量 不能扩展卷
- 购物车参考
- SpringMVC和Struts2区别比较
- Python——正则表达式
- 国内有哪些好的刷题网站?
- CMake 使用第一篇
- php 地区无限极分类处理方式
- 不安全配置Nginx可能导致的安全漏洞
- win7+ubuntu双系统安装方法
- 面试总结题