购物车模板
来源:互联网 发布:js阻止a标签1次跳转 编辑:程序博客网 时间:2024/04/28 23:56
这个购物车的功能:
有加减器,全选反选CheckBox,价格的监听。用的是死数据,如果要求获得网络数据的话,
可以把数据改一下。
这里的数据展示用了RecyclerView,所以,需要导一个RecyclerView的依赖。这个自己导就不打了
代码如下:
先弄好加减器
布局
<?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"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="-" android:background="#fff" android:id="@+id/jian" /> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:inputType="number" android:text="1" android:id="@+id/num"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#fff" android:text="+" android:id="@+id/jia"/></LinearLayout>
CustomView
import android.content.Context;import android.support.annotation.Nullable;import android.text.Editable;import android.text.TextWatcher;import android.util.AttributeSet;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.LinearLayout;import android.widget.Toast;/** * Created by czx on 2017/10/23. */public class CustomView extends LinearLayout{ public CustomView(Context context) { super(context); } public CustomView(final Context context, @Nullable AttributeSet attrs) { super(context, attrs); View view = LayoutInflater.from(context).inflate(R.layout.custom_layout,null); addView(view); Button jian = (Button) view.findViewById(R.id.jian); Button jia = (Button) view.findViewById(R.id.jia); final EditText num = (EditText) view.findViewById(R.id.num); //减号 jian.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String result = num.getText().toString().trim(); int integerResult = Integer.valueOf(result); //给做个限制 if(integerResult > 1){ integerResult = integerResult - 1; num.setText(integerResult + ""); }else{ Toast.makeText(context, "最小值为1", Toast.LENGTH_SHORT).show(); } if(listener != null){ listener.onChange(integerResult); } } }); //加号 jia.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String result = num.getText().toString().trim(); int integerResult = Integer.valueOf(result); if(integerResult < 10000){ integerResult = integerResult + 1; num.setText(integerResult +""); }else{ Toast.makeText(context, "已经超出最大值", Toast.LENGTH_SHORT).show(); } if(listener != null ){ listener.onChange(integerResult); } } }); num.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { Log.i("beforeTextChanged",s+"-----"+start+"-------"+count+"-----"+after);// if(start < 0){// Toast.makeText(context, "000000000000000", Toast.LENGTH_SHORT).show();// s = "1";// }else if(start > 4){// s = "10000";// Toast.makeText(context, "111111111", Toast.LENGTH_SHORT).show();// } } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { Log.i("onTextChanged",s+"-----"+start+"-------"+before+"-----"+count); } @Override public void afterTextChanged(Editable s) { if(listener != null ){ listener.onChange(Long.valueOf(s.toString())); } } }); } public CustomView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public ChangeListener listener; public void setListener(ChangeListener listener){ this.listener = listener; } interface ChangeListener{ public void onChange(long count); }}
写一个Bean
public class UserBean { private String name; private boolean b = false; private float price; private long count; public UserBean(String name, boolean b, float price, long count) { this.name = name; this.b = b; this.price = price; this.count = count; } public String getName() { return name; } public void setName(String name) { this.name = name; } public boolean isB() { return b; } public void setB(boolean b) { this.b = b; } public float getPrice() { return price; } public void setPrice(float price) { this.price = price; } public long getCount() { return count; } public void setCount(long count) { this.count = count; }}
然后是主界面的布局
<?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" android:orientation="vertical" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:id="@+id/recyclerview"> </android.support.v7.widget.RecyclerView> <LinearLayout android:layout_width="match_parent" android:layout_height="50dp" android:orientation="horizontal"> <CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:id="@+id/ck_all"/> <TextView android:layout_width="wrap_content" android:layout_height="match_parent" android:text="全选" android:textSize="20sp" android:gravity="center" /> <TextView android:layout_width="0dp" android:layout_weight="1" android:layout_height="match_parent" android:text="合计:" android:layout_marginLeft="10dp" android:textSize="20sp" android:gravity="center_vertical" android:id="@+id/all_price" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="确认订单" android:id="@+id/buy"/> </LinearLayout></LinearLayout>
主界面代码
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 java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity { private TextView all_price; private CheckBox checkBox; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button buy = (Button) findViewById(R.id.buy); checkBox = (CheckBox) findViewById(R.id.ck_all); RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerview); all_price = (TextView) findViewById(R.id.all_price); LinearLayoutManager manager = new LinearLayoutManager(this); recyclerView.setLayoutManager(manager); //添加死数据 final List<UserBean> list = new ArrayList<>(); for (int i = 0; i < 5; i++) { list.add(new UserBean("商品" + i, false, 100, 1)); } final RvAdapter adapter = new RvAdapter(this, list); recyclerView.setAdapter(adapter); adapter.setCheckListener(new RvAdapter.CheckListener() { @Override public void check(boolean check, int position) { //监听全选 boolean all_check = true; //价格 float price = 0; for (int i = 0; i < list.size(); i++) { if (list.get(i).isB()) { price += list.get(i).getPrice() * list.get(i).getCount(); } } all_price.setText(price + "元"); for (int i = 0; i < list.size(); i++) { if (!list.get(i).isB()) { all_check = false; break; } } if (all_check) { checkBox.setChecked(true); } else { checkBox.setChecked(false); } } }); //全选和反选 checkBox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { boolean check = checkBox.isChecked(); float price = 0; for (int i = 0; i < list.size(); i++) { list.get(i).setB(check); if (list.get(i).isB()) { price += list.get(i).getPrice() * list.get(i).getCount(); } } adapter.notifyDataSetChanged(); all_price.setText(price + "元"); } }); }}
RecylerView的适配器
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.CheckBox;import android.widget.TextView;import java.util.List;/** * Created by czx on 2017/10/22. */public class RvAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{ private Context context; private List<UserBean> list; public RvAdapter(Context context, List<UserBean> list) { this.context = context; this.list = list; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.item_layout,parent,false); ViewHolder holder = new ViewHolder(view); return holder; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) { if(holder instanceof ViewHolder){ ViewHolder viewHolder = (ViewHolder)holder; if(list.get(position).isB()){ viewHolder.item_ck.setChecked(true); }else{ viewHolder.item_ck.setChecked(false); } viewHolder.item_name.setText(list.get(position).getPrice()+""); viewHolder.item_ck.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { boolean isChecked = list.get(position).isB(); list.get(position).setB(!isChecked); notifyDataSetChanged(); if(listener != null){ listener.check(!isChecked,position); } } });// viewHolder.item_ck.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {// @Override// public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {//// }// }); //监听Edtext viewHolder.item_custom.setListener(new CustomView.ChangeListener() { @Override public void onChange(long count) { list.get(position).setCount(count); notifyDataSetChanged(); if(listener != null){ listener.check(list.get(position).isB(),position); } } }); } } @Override public int getItemCount() { return list.size(); } //为check写一个接口 public CheckListener listener; public void setCheckListener(CheckListener listener){ this.listener = listener; } interface CheckListener{ public void check(boolean check,int position); } class ViewHolder extends RecyclerView.ViewHolder{ private final CustomView item_custom; private final TextView item_name; private final CheckBox item_ck; public ViewHolder(View itemView) { super(itemView); item_custom = (CustomView) itemView.findViewById(R.id.item_custom); item_name = (TextView) itemView.findViewById(R.id.item_name); item_ck = (CheckBox) itemView.findViewById(R.id.item_ck); } }}
阅读全文
2 0
- 购物车模板
- 购物车模块设计
- 购物车模块myshoppingcart
- 购物车模块
- 购物车模块测试
- ECshop--购物车模块
- 简单购物车模式
- Angular购物车模拟
- 购物车模型
- ExpandableListView购物车模版
- 微信小程序demo:贝思客:电商模板,购物车模板
- 网上书店购物车模拟
- 购物车模块总结1
- 购物车模块总结2
- 购物车模块总结3
- 图书商城:购物车模块
- 【典型例题】购物车模型
- 购物车模块的功能设计
- 2017.10.24 LeetCode 88. Merge Sorted Array 【思维呀】
- 51nod 1618 树或非树 树链剖分+线段树
- angularjs过滤、全选、删除
- 09-Spring-spring整合注解形式的hibernate
- 人脸识别、动作识别.....世界最大成人片网站为用户操碎了心
- 购物车模板
- 从变量到封装:一文带你为机器学习打下坚实的Python基础
- 如何盯住梅西:TensorFlow目标检测实战
- 伯克利提出强化学习新方法,可让智能体同时学习多个解决方案
- 不打算炫技的谷歌X实验室机器人,为「现实问题」而来
- iOS 委托代理传值与Block回传值.
- 多位学生成绩的统计
- 在保持创新的路上,摩根大通正用5000万美元寻找金融科技公司
- 人工智能如何帮你找到好歌:探秘Spotify神奇的每周歌单