Android 购物车相关(全选/反选、删除、网络数据)
来源:互联网 发布:如何在淘宝上买发票啊 编辑:程序博客网 时间:2024/06/08 20:01
今天 给大家展示 购物车 的效果 及布局展示 :
导入 依赖
compile 'com.android.support:appcompat-v7:25.3.1' compile 'com.android.support.constraint:constraint-layout:1.0.2' compile 'com.android.support:recyclerview-v7:25.3.1' compile 'com.facebook.fresco:fresco:0.11.0' compile 'com.squareup.retrofit2:retrofit:2.0.2' compile 'com.squareup.retrofit2:converter-gson:2.0.2'
通过 retrofit 请求网络数据 ,我们定义了 一个 application :
application类:
import android.app.Application;import com.facebook.drawee.backends.pipeline.Fresco;import com.king.shop.IDataService;import retrofit2.Retrofit;import retrofit2.converter.gson.GsonConverterFactory;/** * application类 */public class IApplication extends Application{ public static IDataService service; @Override public void onCreate() { super.onCreate(); //初始化 Fresco Fresco.initialize(this); //初始化 Retrofit Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://www.zhaoapi.cn/") .addConverterFactory(GsonConverterFactory.create()) .build(); service = retrofit.create(IDataService.class); }}
在里面 初始化 的retrofit 以及 fresco 图片加载框架;
接下来展示 的是 retrofit 拼接接口的类:
import com.king.shop.bean.CarBean;import com.king.shop.bean.DelBean;import com.king.shop.bean.UpDataBean;import retrofit2.Call;import retrofit2.http.GET;import retrofit2.http.Query;/** * retrofit 拼接 接口类 */public interface IDataService { //获取购物车列表的接口 @GET("product/getCarts") Call<CarBean> getCar(@Query("uid") String uid, @Query("source") String source); //删除商品 的接口 @GET("product/deleteCart") Call<DelBean> delCar(@Query("uid") String uid, @Query("pid") String pid, @Query("source") String source);}
自定义 加减器 :
import android.content.Context;import android.support.annotation.Nullable;import android.util.AttributeSet;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.LinearLayout;import android.widget.Toast;import com.king.shop.R;/** * 自定义 加减器 */public class MyCustomCar extends LinearLayout{ private Button mBtnDel; private EditText mEtNum; private Button mBtnAdd; private int mCount = 1; public MyCustomCar(Context context) { super(context); } public MyCustomCar(Context context, @Nullable AttributeSet attrs) { super(context, attrs); View view = View.inflate(context, R.layout.custom_item, null); mBtnDel = (Button) view.findViewById(R.id.btnDel); mEtNum = (EditText) view.findViewById(R.id.etNum); mBtnAdd = (Button) view.findViewById(R.id.btnAdd); //减少点击事件 mBtnDel.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String content = mEtNum.getText().toString().trim(); int count = Integer.valueOf(content); if (count > 1){ mCount = count - 1 ; mEtNum.setText(""+mCount+""); if (customListener != null){ customListener.del(mCount); } }else{ Toast.makeText(getContext(), "不能再少了", Toast.LENGTH_SHORT).show(); } } }); //增加点击事件 mBtnAdd.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String content = mEtNum.getText().toString().trim(); int count = Integer.valueOf(content); mCount = count + 1; mEtNum.setText(""+mCount+""); if (customListener != null){ customListener.add(mCount); } } }); addView(view); } public MyCustomCar(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } //接口回调 private CustomListener customListener; public void setCustomListener(CustomListener customListener) { this.customListener = customListener; } public interface CustomListener{ void add(int count); void del(int count); } public void setEditText(int num){ mEtNum.setText(""+num+""); }}
通过 MVP 框架:
model:
import com.king.shop.bean.CarBean;/** * 购物车列表的 model 接口层 */public interface ICarModel { void success(CarBean bean);}
mport com.king.shop.app.IApplication;import com.king.shop.bean.CarBean;import retrofit2.Call;import retrofit2.Callback;import retrofit2.Response;/** * 购物车展示列表的 model 层 */public class CarModel { public void getData(final ICarModel iCarModel){ //通过 retrofit 请求数据 Call<CarBean> call = IApplication.service.getCar("205", "android"); call.enqueue(new Callback<CarBean>() { @Override public void onResponse(Call<CarBean> call, Response<CarBean> response) { iCarModel.success(response.body() ); } @Override public void onFailure(Call<CarBean> call, Throwable t) { } }); }}
view 层:
import com.king.shop.bean.CarBean;/** * 购物车列表的 view 层 */public interface ICarView { void success(CarBean bean);}
presenter 层:
import com.king.shop.bean.CarBean;import com.king.shop.model.CarModel;import com.king.shop.model.ICarModel;import com.king.shop.view.ICarView;/** * 购物车列表的 presenter 层 */public class CarPresenter { private ICarView iCarView; private CarModel carModel; public CarPresenter(ICarView iCarView) { this.iCarView = iCarView; carModel = new CarModel(); } public void getData(){ carModel.getData(new ICarModel() { @Override public void success(CarBean bean) { iCarView.success(bean); } }); }}
mainActivity 类:
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.king.shop.adapter.CarAdapter;import com.king.shop.bean.CarBean;import com.king.shop.presenter.CarPresenter;import com.king.shop.view.ICarView;/** * 购物车 展示 */public class MainActivity extends AppCompatActivity implements ICarView, View.OnClickListener { private CarPresenter presenter; private TextView mTvTotalNum;// private TextView mTvEdit; private RecyclerView mRecyclerView; private CheckBox mCheckAll; private TextView mTvTotalPrice; private Button mBtnBuy; private CarAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); //实例化 presenter presenter = new CarPresenter(this); //调用 presenter 的方法 请求购物车 的数据 presenter.getData(); //全选 标签 默认是 1 mCheckAll.setTag(1); //加载布局管理器 mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); //实例化 适配器 adapter = new CarAdapter(this); //加载适配器 mRecyclerView.setAdapter(adapter); // 通过 接口回调 获取适配器得到的 总数量 与 总价格 adapter.setUpDataListener(new CarAdapter.UpDataListener() { @Override public void setTotal(String price, String num, boolean isCheck) { mTvTotalNum.setText("购物车("+num+")"); mTvTotalPrice.setText("¥"+price); //设置 全选的 标签 if (isCheck){ mCheckAll.setTag(2); }else{ mCheckAll.setTag(1); } mCheckAll.setChecked(isCheck); } }); //全选 mCheckAll.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int tag = (int) mCheckAll.getTag(); if (tag == 1){ mCheckAll.setTag(2); }else{ mCheckAll.setTag(1); } //调用 适配器的全选的方法 adapter.allCheck(mCheckAll.isChecked()); } }); } private void initView() { mTvTotalNum = (TextView) findViewById(R.id.tvTotalNum);// mTvEdit = (TextView) findViewById(R.id.tvEdit); mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView); mCheckAll = (CheckBox) findViewById(R.id.checkAll); mTvTotalPrice = (TextView) findViewById(R.id.tvTotalPrice); mBtnBuy = (Button) findViewById(R.id.btnBuy); mBtnBuy.setOnClickListener(this); } @Override public void success(CarBean bean) { //调用 适配器中的 add 方法 adapter.add(bean); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btnBuy: // TODO 17/12/19 break; default: break; } }}
adapter 类:
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.CheckBox;import android.widget.LinearLayout;import android.widget.TextView;import android.widget.Toast;import com.facebook.drawee.view.SimpleDraweeView;import com.king.shop.R;import com.king.shop.app.IApplication;import com.king.shop.bean.CarBean;import com.king.shop.bean.DelBean;import com.king.shop.custom.MyCustomCar;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import retrofit2.Call;import retrofit2.Callback;import retrofit2.Response;/** * 购物车 适配器 */public class CarAdapter extends RecyclerView.Adapter<CarAdapter.MyViewHolder>{ private Context context; private int mCount = 1; List<CarBean.DataBean.ListBean> list; private HashMap<String, String> hashMap = new HashMap<>(); public CarAdapter(Context context) { this.context = context; } public void add(CarBean bean) { if (list == null) { list = new ArrayList<>(); } //遍历商铺的集合 for (CarBean.DataBean b :bean.getData()) { //将 对应的 店铺号 与 店铺名 存入 map集合 hashMap.put(b.getSellerid(),b.getSellerName()); //遍历商铺 ,将 商品 添加进入集合 for (int i = 0; i < b.getList().size(); i++) { list.add(b.getList().get(i)); } } setFirst(list); //刷新适配器 notifyDataSetChanged(); } /** * 设置是否显示 店铺名 * 1 为显示 * 2 为不显示 */ public void setFirst(List<CarBean.DataBean.ListBean> list){ if (list.size() > 0){ //第一条商品一定 显示 商铺名 list.get(0).setIsFirst(1); //从第二条开始遍历 for (int i = 1; i < list.size(); i++) { //从第二条开始 ,如果商铺的 id 与上一个 id 一样时,设置商铺名为隐藏 if (list.get(i).getSellerid() == list.get(i-1).getSellerid()){ list.get(i).setIsFirst(2); }else{ list.get(i).setIsFirst(1); //如果商铺的 商品 仅有一件商品 且被选中 那么商铺也将被选中 if (list.get(i).isGood_check() == true){ list.get(i).setShop_check(list.get(i).isGood_check()); } } } } } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View inflate = View.inflate(context, R.layout.car_item, null); MyViewHolder holder = new MyViewHolder(inflate); return holder; } @Override public void onBindViewHolder(final MyViewHolder holder, final int position) { //如果 isFirst 属性为1的话,展示 if (list.get(position).getIsFirst() == 1){ holder.mTvShopName.setVisibility(View.VISIBLE); holder.mCheckShop.setVisibility(View.VISIBLE); holder.mCheckShop.setChecked(list.get(position).isShop_check()); holder.mTvShopName.setText(hashMap.get(String.valueOf(list.get(position).getSellerid()))); }else{ holder.mCheckShop.setVisibility(View.GONE); holder.mTvShopName.setVisibility(View.GONE); } holder.mSimple.setImageURI(list.get(position).getImages().split("\\|")[0]); holder.mCheckGood.setChecked(list.get(position).isGood_check()); holder.mTvGoodName.setText(list.get(position).getTitle()); holder.mTvPrice.setText("¥"+list.get(position).getPrice()+""); holder.mTvNum.setText("X"+list.get(position).getNum()); //商铺 CheckBox 的点击事件 holder.mCheckShop.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { list.get(position).setShop_check(holder.mCheckShop.isChecked()); for (int i = 0; i < list.size(); i++) { if (list.get(i).getSellerid() == list.get(position).getSellerid()){ list.get(i).setGood_check(holder.mCheckShop.isChecked()); } } notifyDataSetChanged(); sum(list); } }); //商品 CheckBox 的点击事件 holder.mCheckGood.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //根据CheckBox的状态 改变属性 list.get(position).setGood_check(holder.mCheckGood.isChecked()); for (int i = 0; i < list.size(); i++) { for (int j = 0; j < list.size(); j++) { if (list.get(i).getSellerid() == list.get(j).getSellerid() && !list.get(j).isGood_check()){ list.get(i).setShop_check(false); break; }else{ list.get(i).setShop_check(true); } } } notifyDataSetChanged(); sum(list); } }); /** * 点击商品条目上的编辑 */ holder.mTvEdit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //点击条目上的编辑变化布局 与 文字 if (holder.mTvEdit.getText().toString().equals("完成")){ holder.mTvEdit.setText("编辑"); holder.mLlOne.setVisibility(View.VISIBLE); holder.mLlTwo.setVisibility(View.GONE); }else{ holder.mTvEdit.setText("完成"); holder.mLlOne.setVisibility(View.GONE); holder.mLlTwo.setVisibility(View.VISIBLE); } //点击 删除 按钮 holder.mBtnDel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //调用 删除的 接口 IApplication.service.delCar("205",list.get(position).getPid()+"","android") .enqueue(new Callback<DelBean>() { @Override public void onResponse(Call<DelBean> call, Response<DelBean> response) { DelBean body = response.body(); //在布局上删除条目,刷新适配器 list.remove(position); notifyDataSetChanged(); Toast.makeText(context, body.getMsg(), Toast.LENGTH_SHORT).show(); } @Override public void onFailure(Call<DelBean> call, Throwable t) { } }); } }); //给加减器的商品个数赋值 holder.mMyCustomCar.setEditText(list.get(position).getNum()); //加减器的接口回调 holder.mMyCustomCar.setCustomListener(new MyCustomCar.CustomListener() { //添加 @Override public void add(int count) { holder.mTvNum.setText(""+count+""); mCount = count; notifyDataSetChanged(); sum(list); } //减少 @Override public void del(int count) { holder.mTvNum.setText(""+count+""); notifyDataSetChanged(); sum(list); } }); } }); } //全选 public void allCheck(boolean isCheck){ // 如果 全选按钮被选中,商铺与商品也被选中 for (int i = 0; i < list.size(); i++) { list.get(i).setShop_check(isCheck); list.get(i).setGood_check(isCheck); } notifyDataSetChanged(); sum(list); } //计算 总数量 与 总价格 public void sum(List<CarBean.DataBean.ListBean> list){ int totalNum = 0; float totalPrice = 0.0f; boolean allCheck = true; //遍历商品的集合 for (int i = 0; i < list.size(); i++) { //如果商品的CheckBox选中,计算被选中的商品数量与价钱 if (list.get(i).isGood_check()){ totalNum += list.get(i).getNum(); totalPrice += list.get(i).getPrice() * list.get(i).getNum(); }else { allCheck = false; } } //将 总数量 与总价钱 通过接头回调传到activity upDataListener.setTotal(totalPrice+"",totalNum+"",allCheck); } @Override public int getItemCount() { return list == null ? 0 :list.size(); } public class MyViewHolder extends RecyclerView.ViewHolder { private CheckBox mCheckShop; private TextView mTvShopName; private TextView mTvEdit; private CheckBox mCheckGood; private SimpleDraweeView mSimple; private TextView mTvGoodName; private TextView mTvPrice; private TextView mTvNum; private LinearLayout mLlOne; private MyCustomCar mMyCustomCar; private Button mBtnDel; private LinearLayout mLlTwo; public MyViewHolder(View itemView) { super(itemView); mCheckShop = (CheckBox) itemView.findViewById(R.id.checkShop); mTvShopName = (TextView) itemView.findViewById(R.id.tvShopName); mTvEdit = (TextView) itemView.findViewById(R.id.tvEdit); mCheckGood = (CheckBox) itemView.findViewById(R.id.checkGood); mSimple = (SimpleDraweeView) itemView.findViewById(R.id.simple); mTvGoodName = (TextView) itemView.findViewById(R.id.tvGoodName); mTvPrice = (TextView) itemView.findViewById(R.id.tvPrice); mTvNum = (TextView) itemView.findViewById(R.id.tvNum); mLlOne = (LinearLayout) itemView.findViewById(R.id.llOne); mMyCustomCar = (MyCustomCar) itemView.findViewById(R.id.myCustomCar); mBtnDel = (Button) itemView.findViewById(R.id.btnDels); mLlTwo = (LinearLayout) itemView.findViewById(R.id.llTwo); } } //计算总价与总数量的接口回调 private UpDataListener upDataListener; public void setUpDataListener(UpDataListener upDataListener) { this.upDataListener = upDataListener; } public interface UpDataListener{ void setTotal(String price,String num,boolean isCheck); }}
两个 bean 类:
mport java.util.List;/** * 购物车 列表 bean * * 向 商品 的list 中 添加 三个属性 * private int isFirst ; * private boolean good_check; * private boolean shop_check; * */public class CarBean { 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 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; /** *定义三个 */ private int isFirst ; private boolean good_check; private boolean shop_check; public int getIsFirst() { return isFirst; } public void setIsFirst(int isFirst) { this.isFirst = isFirst; } public boolean isGood_check() { return good_check; } public void setGood_check(boolean good_check) { this.good_check = good_check; } public boolean isShop_check() { return shop_check; } public void setShop_check(boolean shop_check) { this.shop_check = shop_check; } public double getBargainPrice() { return bargainPrice; } public void setBargainPrice(double bargainPrice) { this.bargainPrice = bargainPrice; } public String getCreatetime() { return createtime; } public void setCreatetime(String createtime) { this.createtime = createtime; } public String getDetailUrl() { return detailUrl; } public void setDetailUrl(String detailUrl) { this.detailUrl = detailUrl; } public String getImages() { return images; } public void setImages(String images) { this.images = images; } public int getNum() { return num; } public void setNum(int num) { this.num = num; } public int getPid() { return pid; } public void setPid(int pid) { this.pid = pid; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public int getPscid() { return pscid; } public void setPscid(int pscid) { this.pscid = pscid; } public int getSelected() { return selected; } public void setSelected(int selected) { this.selected = selected; } public int getSellerid() { return sellerid; } public void setSellerid(int sellerid) { this.sellerid = sellerid; } public String getSubhead() { return subhead; } public void setSubhead(String subhead) { this.subhead = subhead; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } } }}
/** * 购物车 删除 bean */public class DelBean { /** * msg : 删除购物车成功 * code : 0 */ private String msg; private String code; 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; }}
布局:
mainactivity 布局
<?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:layout_height="match_parent" android:orientation="vertical" tools:context="com.king.shop.MainActivity"> <RelativeLayout android:layout_width="match_parent" android:layout_height="50dp" android:padding="10dp"> <TextView android:id="@+id/tvTotalNum" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="购物车(0)" android:textSize="20sp" /> <TextView android:id="@+id/tvEdit" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_alignParentRight="true" android:gravity="center_vertical" android:text="编辑" /> </RelativeLayout> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <CheckBox android:id="@+id/checkAll" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="全选" /> <RelativeLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center_vertical" android:orientation="horizontal"> <TextView android:id="@+id/tvTotalPrice" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:text="总价:¥0.00" /> </RelativeLayout> <Button android:id="@+id/btnBuy" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="购买" /> </LinearLayout></LinearLayout>
适配器布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="10dp"> <RelativeLayout android:layout_width="match_parent" android:layout_height="50dp" android:background="#fff"> <LinearLayout android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center_vertical" android:orientation="horizontal"> <CheckBox android:id="@+id/checkShop" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/tvShopName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="商家" /> </LinearLayout> <TextView android:id="@+id/tvEdit" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_alignParentRight="true" android:gravity="center_vertical" android:text="编辑" android:textSize="15sp" /> </RelativeLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:orientation="horizontal" android:paddingLeft="20dp"> <CheckBox android:id="@+id/checkGood" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" /> <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/simple" android:layout_width="100dp" android:layout_height="100dp" /> <LinearLayout android:id="@+id/llOne" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center_vertical" android:orientation="vertical" android:visibility="visible"> <TextView android:id="@+id/tvGoodName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:maxLines="2" android:text="" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:id="@+id/tvPrice" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="0.00" /> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" /> <TextView android:id="@+id/tvNum" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="" /> </LinearLayout> </LinearLayout> <LinearLayout android:id="@+id/llTwo" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center_vertical" android:orientation="horizontal" android:visibility="gone"> <LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center_vertical"> <com.king.shop.custom.MyCustomCar android:id="@+id/myCustomCar" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> <Button android:id="@+id/btnDels" android:layout_width="wrap_content" android:layout_height="match_parent" android:text="删除" /> </LinearLayout> </LinearLayout></LinearLayout>
加减器布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" android:gravity="center_vertical"> <Button android:id="@+id/btnDel" android:layout_width="50dp" android:layout_height="wrap_content" android:background="#fff" android:text="—"/> <EditText android:id="@+id/etNum" android:layout_width="50dp" android:layout_height="wrap_content" android:background="@null"/> <Button android:id="@+id/btnAdd" android:layout_width="50dp" android:layout_height="wrap_content" android:background="#fff" android:text="+"/></LinearLayout>
阅读全文
0 0
- Android 购物车相关(全选/反选、删除、网络数据)
- 购物车,全选,反选,删除,添加
- 购物车=加减+计算+总和+全选+反选+删除
- 购物车全选反选
- 购物车——(批量删除,全选反选,修改值)
- Android Studio 购物车,二级目录,全选反选,计数
- android studio二级购物车的反选全选
- Android反选,全选,删除
- android模拟数据实现全选反选批量删除
- Android 购物车(精仿)可删可全选与反选
- 全选与反选_购物车
- 购物车必备全选反选
- 购物车的全选和反选
- 购物车全选,反选,结算
- angularjs购物车全选反选
- 购物车修改删除 全选反选批量删除查询排序
- Android 实现RecyclerView嵌套RecyclerView 实现购物车的全选 反选 单选 商家全选
- 购物车之 全选 反选 批量删除 包邮 总价
- javabean属性复制BeanUtil
- 配置NDK,使用JNI
- oracle start with connect by prior 递归查询用法
- 获得json数据(表格)
- python和mysql交互
- Android 购物车相关(全选/反选、删除、网络数据)
- 使用MapStruct处理javabean之间的转换
- MYSQL性能优化
- 美研发可为手机充电面料 Model3试驾曝出大量问题
- 安装 DockerToolBox
- LCD IP KVM使用经典案例
- 爬虫网易LOFTER图片(适用于类似网页,如百度贴吧 )
- LSTM 网络
- kafka消费者报错:kafka.common.ConsumerRebalanceFailedException