100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 购物车一个Adaper 可以删除 全选反选 数量加减

购物车一个Adaper 可以删除 全选反选 数量加减

时间:2019-02-25 03:16:58

相关推荐

购物车一个Adaper 可以删除 全选反选 数量加减

1activity_main.xml页面布局

<?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout xmlns:android="/apk/res/android"xmlns:app="/apk/res-auto"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".activity.MainActivity"><android.support.v7.widget.RecyclerViewandroid:id="@+id/recycle_view"android:layout_width="0dp"android:layout_height="0dp"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintBottom_toTopOf="@id/text_jiesuan"/><CheckBoxandroid:id="@+id/query"android:layout_width="wrap_content"android:layout_height="wrap_content"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toBottomOf="@id/recycle_view"app:layout_constraintBottom_toBottomOf="parent"/><TextViewandroid:id="@+id/text_query"android:layout_width="wrap_content"android:layout_height="wrap_content"app:layout_constraintLeft_toRightOf="@id/query"app:layout_constraintBottom_toBottomOf="@id/query"app:layout_constraintTop_toTopOf="@id/query"android:textSize="20sp"android:text="全选/反选"/><TextViewandroid:id="@+id/text_total"android:layout_width="wrap_content"android:layout_height="wrap_content"app:layout_constraintTop_toBottomOf="@id/recycle_view"app:layout_constraintLeft_toRightOf="@id/text_query"android:layout_marginLeft="10dp"android:text="总价:¥0元"android:textColor="#f00"android:textSize="18sp"/><TextViewandroid:id="@+id/text_shopp"android:layout_width="wrap_content"android:layout_height="wrap_content"app:layout_constraintTop_toBottomOf="@id/text_total"app:layout_constraintLeft_toRightOf="@id/text_query"app:layout_constraintBottom_toBottomOf="parent"android:layout_marginLeft="10dp"android:text="共0件商品"android:textSize="18sp"/><TextViewandroid:id="@+id/text_jiesuan"android:layout_width="wrap_content"android:layout_height="wrap_content"app:layout_constraintTop_toBottomOf="@id/recycle_view"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintRight_toRightOf="parent"android:text="去结算"android:textSize="26sp"android:background="@drawable/button_shape"android:gravity="center"/></android.support.constraint.ConstraintLayout>

2自定义加减器布局

<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal"><ImageButtonandroid:id="@+id/jian"android:layout_width="50dp"android:layout_height="50dp"android:src="@drawable/ic_jian_name"/><EditTextandroid:id="@+id/ed_num"android:layout_width="50dp"android:layout_height="50dp"android:text="1"android:textSize="24sp"android:inputType="number"android:background="@drawable/edit_shape"/><ImageButtonandroid:id="@+id/add"android:layout_width="50dp"android:layout_height="50dp"android:src="@drawable/ic_add_name"/></LinearLayout>

3.子条目布局

<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"android:padding="15dp"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><CheckBoxandroid:id="@+id/shop_check"android:layout_width="50dp"android:layout_height="50dp" /><TextViewandroid:id="@+id/shopp_commodity"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="20dp"android:text="shopp_commodity"android:textSize="24sp"/></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"android:gravity="center_vertical"><CheckBoxandroid:id="@+id/item_check"android:layout_width="wrap_content"android:layout_height="wrap_content" /><ImageViewandroid:id="@+id/item_image"android:layout_width="120dp"android:layout_height="120dp"android:src="@mipmap/ic_launcher"/><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="match_parent"android:layout_marginLeft="10dp"android:orientation="vertical"android:layout_weight="1"><TextViewandroid:id="@+id/item_name"android:layout_width="wrap_content"android:layout_height="0dp"android:layout_weight="1"android:textSize="18sp"android:text="name"android:maxLines="2"/><TextViewandroid:id="@+id/item_price"android:layout_width="wrap_content"android:layout_height="0dp"android:layout_weight="1"android:textSize="18sp"android:text="price"android:textColor="#f00"/><com.example.shoppingcart01.custom.CustomViewandroid:id="@+id/custom"android:layout_width="wrap_content"android:layout_height="0dp"android:layout_weight="1"/></LinearLayout><ImageViewandroid:id="@+id/item_del"android:layout_width="30dp"android:layout_height="30dp"android:layout_marginRight="10dp"android:src="@drawable/ic_del_name"/></LinearLayout></LinearLayout>

4.两个shape页面

4.1加减器shape

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="/apk/res/android"><corners android:radius="10dp"/><solid android:color="#fff"/><size android:height="45dp" android:width="45dp"/></shape>

4.2button的shape

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="/apk/res/android"><corners android:radius="200dp"/><solid android:color="#0ff"/><size android:width="130dp" android:height="60dp"/></shape>

5.Bean类 里面需要自己写三个属性代码中有注释

package com.example.shoppingcart01.bean;import java.util.List;public class ShoppBean {private String msg;private String code;private List<DataBean> data;private final String SUCCESS_CODE="0";public boolean isSuccess(){return code.equals(SUCCESS_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;}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;//1为显示商铺, 2为隐藏商铺private int isFirst = 1;//每个商品的选中状态private boolean item_check;//商店的选中状态private boolean shop_check;public int getIsFirst() {return isFirst;}public void setIsFirst(int isFirst) {this.isFirst = isFirst;}public boolean isItem_check() {return item_check;}public void setItem_check(boolean item_check) {this.item_check = item_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;}}}}

6.自定义加减器的view

package com.example.shoppingcart01.custom;import android.content.Context;import android.text.Editable;import android.text.TextWatcher;import android.util.AttributeSet;import android.view.LayoutInflater;import android.view.View;import android.widget.EditText;import android.widget.ImageButton;import android.widget.LinearLayout;import com.example.shoppingcart01.R;public class CustomView extends LinearLayout {private ImageButton jian;private ImageButton add;private EditText editText;private int mCount = 1;public CustomView(Context context) {super(context);}public CustomView(Context context, AttributeSet attrs) {super(context, attrs);View view = View.inflate(context,R.layout.custom_item,this);jian = view.findViewById(R.id.jian);add = view.findViewById(R.id.add);editText = view.findViewById(R.id.ed_num);//减jian.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {String content = editText.getText().toString().trim();Integer count = Integer.valueOf(content);if(count>1){mCount = count-1;editText.setText(mCount+"");//回调给adapter里面if(customListener!=null){customListener.jianjian(mCount);}}}});//加add.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {String content = editText.getText().toString().trim();Integer count = Integer.valueOf(content)+1;mCount = count;editText.setText(mCount+"");//回调给adapter里面if(customListener!=null){customListener.jianjian(mCount);}}});//输入框editText.addTextChangedListener(new TextWatcher() {@Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after) {}@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {//TODO}@Overridepublic void afterTextChanged(Editable s) {}});}private CustomListener customListener;public void setCustomListener(CustomListener customListener){this.customListener = customListener;}//定义接口加减public interface CustomListener{void jianjian(int count);void shuruzhi(int count);}//这个方法共adaper设置数量时调用public void setEditText(int num){if(editText!=null){editText.setText(num+"");}}}

7.适配器页面(这里操作的任务比较多)

package com.example.shoppingcart01.adaper;import android.content.Context;import android.support.annotation.NonNull;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.CheckBox;import android.widget.ImageView;import android.widget.TextView;import com.bumptech.glide.Glide;import com.example.shoppingcart01.R;import com.example.shoppingcart01.bean.ShoppBean;import com.example.shoppingcart01.custom.CustomView;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.logging.Handler;public class ShopAdaper extends RecyclerView.Adapter<RecyclerView.ViewHolder> {private Context mContext;private List<ShoppBean.DataBean.ListBean> list;//存放商家id和商家名称的map集合private Map<String,String> map = new HashMap<>();public ShopAdaper(Context mContext) {this.mContext = mContext;}/*** 添加数据并更新显示* */public void add(ShoppBean shoppBean){//传进来的是bean对象if(list == null){list = new ArrayList<>();}//第一层遍历商家和商品for(ShoppBean.DataBean bean:shoppBean.getData()){//把商品的id和商品的名称添加到map集合里 ,,为了之后方便调用map.put(bean.getSellerid(),bean.getSellerName());//第二层遍历里面的商品for(int i = 0;i<bean.getList().size();i++){//添加到list集合里list.add(bean.getList().get(i));}}//调用方法 设置显示或隐藏 商铺名setFirst(list);notifyDataSetChanged();}@NonNull@Overridepublic RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {View view = LayoutInflater.from(mContext).inflate(R.layout.shopp_item,viewGroup,false);MyViewHolder viewHolder = new MyViewHolder(view);return viewHolder;}@Overridepublic void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, final int i) {/*** 设置商铺的 shop_checkbox和商铺的名字 显示或隐藏* */final MyViewHolder holder = (MyViewHolder) viewHolder;if(list.get(i).getIsFirst() == 1){//显示商家holder.shop_check.setVisibility(View.VISIBLE);holder.shopp_commodity.setVisibility(View.VISIBLE);//设置选中状态holder.shop_check.setChecked(list.get(i).isShop_check());holder.shopp_commodity.setText(map.get(String.valueOf(list.get(i).getSellerid())));}else{//隐藏holder.shop_check.setVisibility(View.GONE);holder.shopp_commodity.setVisibility(View.GONE);}//拆分images字段String[] str = list.get(i).getImages().split("\\|");//设置商品的图片Glide.with(mContext).load(str[0]).into(holder.item_image);//控制商品的checkbox,根据字段改变holder.item_check.setChecked(list.get(i).isItem_check());holder.item_name.setText(list.get(i).getTitle());holder.item_price.setText(list.get(i).getPrice()+"");//调用customview里的方法设置加减号中间的数字holder.custom.setEditText(list.get(i).getNum());//商铺的shop_checkbox点击事件 ,控制商品的item_checkboxholder.shop_check.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//先改变数据源中的shop_checklist.get(i).setShop_check(holder.shop_check.isChecked());for(int a = 0;a<list.size();a++){//如果是同一家商铺的 都给成相同状态if(list.get(i).getSellerid() == list.get(a).getSellerid()){//当前条目的选中状态 设置成 当前商铺的选中状态list.get(a).setItem_check(holder.shop_check.isChecked());}}//刷新适配器notifyDataSetChanged();//调用求和的方法sum(list);}});//商品的item_checkbox点击事件,控制商铺的shop_checkboxholder.item_check.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//先改变数据源中的item_checkboxlist.get(i).setItem_check(holder.item_check.isChecked());//反向控制商铺的shop_checkboxfor(int s = 0;s<list.size();s++){for(int j = 0;j<list.size();j++){//如果两个商品是同一家店铺的 并且 这两个商品的item_checkbox选中状态不一样if(list.get(s).getSellerid() == list.get(j).getSellerid()&&!list.get(j).isItem_check()){//就把商铺的shop_checkbox改成falselist.get(s).setShop_check(false);break;}else{//同一家商铺的商品 选中状态都一样,就把商铺shop_checkbox状态改成truelist.get(s).setShop_check(true);}}}//更新适配器notifyDataSetChanged();//调用求和的方法sum(list);}});//删除条目的点击事件holder.item_del.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//移除集合中的当前数据list.remove(i);//删除完当前的条目 重新判断商铺的显示隐藏setFirst(list);//调用重新求和sum(list);notifyDataSetChanged();}});//加减号的监听,holder.custom.setCustomListener(new CustomView.CustomListener() {@Overridepublic void jianjian(int count) {//改变数据源中的数量list.get(i).setNum(count);notifyDataSetChanged();sum(list);}//输入值 求总价@Overridepublic void shuruzhi(int count) {list.get(i).setNum(count);notifyDataSetChanged();sum(list);}});}/*** 设置数据源,控制是否显示商家* */private void setFirst(List<ShoppBean.DataBean.ListBean> list) {if(list.size()>0){//如果是第一条数据就设置isFirst为1list.get(0).setIsFirst(1);//从第二条开始遍历for(int i=1;i<list.size();i++){//如果和前一个商品是同一家商店的if(list.get(i).getSellerid() == list.get(i-1).getSellerid()){//设置成2不显示商铺list.get(i).setIsFirst(2);}else{//设置成1显示商铺list.get(i).setIsFirst(1);//如果当前条目选中,把当前的商铺也选中if(list.get(i).isItem_check() == true){list.get(i).setShop_check(list.get(i).isItem_check());}}}}}//求和的方法private void sum(List<ShoppBean.DataBean.ListBean> list) {//初始的总价为0int totalNum = 0;double totalPrice = 0.0;boolean allCheck = true;for(int i = 0;i<list.size();i++){//把 已经选中的 条目 计算价格if(list.get(i).isItem_check()){totalNum += list.get(i).getNum();totalPrice+= list.get(i).getNum()*list.get(i).getPrice();}else{//如果有个未选中,就标记为falseallCheck = false;}}//接口回调出去 把总价 总数量 和allcheck 传给view层updateListener.setTotal(totalPrice+"",totalNum+"",allCheck);}//view层调用这个方法, 点击quanxuan按钮的操作public void queryAll(boolean checked){for(int i = 0;i<list.size();i++){list.get(i).setShop_check(checked);list.get(i).setItem_check(checked);}notifyDataSetChanged();sum(list);}@Overridepublic int getItemCount() {return list==null?0:list.size();}public class MyViewHolder extends RecyclerView.ViewHolder{public final CheckBox shop_check;public final TextView shopp_commodity;public final CheckBox item_check;public final ImageView item_image;public final TextView item_name;public final TextView item_price;public final CustomView custom;public final ImageView item_del;public MyViewHolder(@NonNull View itemView) {super(itemView);shop_check = itemView.findViewById(R.id.shop_check);shopp_commodity = itemView.findViewById(R.id.shopp_commodity);item_check = itemView.findViewById(R.id.item_check);item_image = itemView.findViewById(R.id.item_image);item_name = itemView.findViewById(R.id.item_name);item_price = itemView.findViewById(R.id.item_price);custom = itemView.findViewById(R.id.custom);item_del = itemView.findViewById(R.id.item_del);}}private UpdateListener updateListener;public void setUpdateListener(UpdateListener updateListener){this.updateListener = updateListener;}//定义接口public interface UpdateListener{void setTotal(String total,String num,boolean allCheck);}}

8.MainActivity页面

package com.example.shoppingcart01.activity;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.OrientationHelper;import android.support.v7.widget.RecyclerView;import android.view.View;import android.widget.CheckBox;import android.widget.TextView;import android.widget.Toast;import com.example.shoppingcart01.R;import com.example.shoppingcart01.adaper.ShopAdaper;import com.example.shoppingcart01.apis.Apis;import com.example.shoppingcart01.bean.ShoppBean;import com.example.shoppingcart01.presenter.PresenterImpl;import com.example.shoppingcart01.view.Iview;import java.util.HashMap;import java.util.Map;public class MainActivity extends AppCompatActivity implements Iview {private PresenterImpl presenter;private RecyclerView recyclerView;private CheckBox query;private TextView text_total;private TextView text_shopp;private ShopAdaper adaper;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);presenter = new PresenterImpl(this);initView();}private void initView() {//获取资源idrecyclerView = findViewById(R.id.recycle_view);query = findViewById(R.id.query);text_total = findViewById(R.id.text_total);text_shopp = findViewById(R.id.text_shopp);//1为不选中query.setTag(1);LinearLayoutManager layoutManager = new LinearLayoutManager(this);layoutManager.setOrientation(OrientationHelper.VERTICAL);recyclerView.setLayoutManager(layoutManager);//创建适配器adaper = new ShopAdaper(this);recyclerView.setAdapter(adaper);//调用适配器里的接口adaper.setUpdateListener(new ShopAdaper.UpdateListener() {@Overridepublic void setTotal(String total, String num, boolean allCheck) {//设置ui的改变text_shopp.setText("共"+num+"件商品");text_total.setText("总价:¥"+total+"元");if(allCheck){query.setTag(2);}else{query.setTag(1);}query.setChecked(allCheck);}});//这里只做ui更改, 点击全选按钮,,调到adapter里面操作query.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//调用adapter里面的方法 ,,把当前quanxuan状态传递过去int tag = (int) query.getTag();if(tag == 1){query.setTag(2);}else{query.setTag(1);}adaper.queryAll(query.isChecked());}});//请求网址Map<String,String> map = new HashMap<>();map.put("uid","71");presenter.startRequest(Apis.URL_SHOPP_CART,map,ShoppBean.class);}@Overridepublic void requestData(Object o) {if(o instanceof ShoppBean){ShoppBean bean = (ShoppBean) o;if(bean==null || !bean.isSuccess()){Toast.makeText(MainActivity.this,bean.getMsg(),Toast.LENGTH_SHORT).show();}else{adaper.add(bean);}}}@Overridepublic void requestFail(Object o) {if(o instanceof Exception){Exception e = (Exception) o;e.printStackTrace();}Toast.makeText(MainActivity.this,"网络请求错误",Toast.LENGTH_SHORT).show();}@Overrideprotected void onDestroy() {super.onDestroy();presenter.onDetach();}}

详细代码 请访问一下链接

/guoxinyu1995/yuekao/tree/master/shoppingcart01

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。