以下是购物车的简单实现代码,希望对大家能起到一点作用
首先咱们先把布局完成
values中的attr布局
<declare-styleable name="QuantityChooseView"> <attr name="maxQuantity" format="integer"/> <attr name="quantity" format="integer"/> <attr name="rightViewEnableSrc" format="integer"/> <attr name="rightViewDisableSrc" format="integer"/> <attr name="leftViewEnableSrc" format="integer"/> <attr name="leftViewDisableSrc" format="integer"/> <attr name="quantityTextSize" format="integer"/> <attr name="quantityTextColor" format="color"/> </declare-styleable>
drawable包的布局
<shape xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 实心 --> <solid android:color="@android:color/white"/> <!-- 边框 --> <stroke android:width="0.5dp" android:color="#000"/> <!-- 圆角 --> <corners android:radius="3dp"/> <!-- 边距 --> <padding android:top="2dp" android:bottom="2dp" android:left="6dp" android:right="6dp"/> </shape>car_item.xml
<LinearLayout android:layout_width="match_parent" android:layout_height="90dp" android:orientation="horizontal" android:gravity="center_vertical" > <CheckBox android:id="@+id/cb" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <ImageView android:id="@+id/cart_item_image1" android:layout_width="0dp" android:layout_weight="1" android:layout_marginLeft="10dp" android:layout_height="80dp" /> <TextView android:text="XXXXXXXXXXXXXXXXXX" android:textSize="18sp" android:id="@+id/cart_item_name1" android:layout_width="0dp" android:layout_height="80dp" android:layout_marginLeft="5dp" android:layout_weight="3"/> <LinearLayout android:layout_width="0dp" android:layout_weight="1" android:layout_marginLeft="5dp" android:orientation="vertical" android:layout_height="80dp"> <TextView android:id="@+id/cart_item_price1" android:layout_width="match_parent" android:layout_height="20dp" android:textSize="12sp" android:text="¥65000.00" android:textColor="#FF5001" android:layout_marginTop="5dp"/> <TextView android:id="@+id/cart_item_numnum" android:layout_width="match_parent" android:layout_height="20dp" android:textSize="12sp" android:text="X1" android:layout_marginTop="5dp"/> </LinearLayout> </LinearLayout> <RelativeLayout android:layout_width="match_parent" android:layout_height="20dp"> <TextView android:id="@+id/cart_item_zongji1" android:layout_width="wrap_content" android:layout_height="20dp" android:layout_alignParentRight="true" android:text="共计1件商品,共计65000.00元" /> </RelativeLayout> <RelativeLayout android:layout_width="match_parent" android:gravity="center_vertical" android:layout_height="40dp"> <TextView android:id="@+id/cart_item_delete1" android:layout_width="60dp" android:layout_height="30dp" android:text="删除" android:gravity="center" android:layout_marginLeft="20dp" android:background="@drawable/cart_item" /> <Button android:id="@+id/cart_item_jiajia" android:layout_width="30dp" android:layout_height="30dp" android:gravity="center" android:text="+" android:clickable="true" android:layout_marginEnd="10dp" android:layout_marginRight="10dp" android:layout_alignParentRight="true" android:background="@drawable/cart_item" /> <TextView android:id="@+id/cart_item_shushu" android:layout_width="30dp" android:layout_height="30dp" android:gravity="center" android:text="1" android:layout_marginEnd="40dp" android:layout_marginRight="40dp" android:layout_alignParentRight="true" android:background="@drawable/cart_item" /> <Button android:id="@+id/cart_item_jianjian" android:layout_width="30dp" android:layout_height="30dp" android:gravity="center" android:text="-" android:clickable="true" android:layout_marginEnd="70dp" android:layout_marginRight="70dp" android:layout_alignParentRight="true" android:background="@drawable/cart_item" /> </RelativeLayout>Activity——car.xml
<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.baway.liuheng.carwork.activity.CarActivity"> <TextView android:id="@+id/title" android:layout_width="match_parent" android:layout_height="50dp" android:orientation="horizontal" android:background="#FF5001" android:gravity="center" android:text="购物车" android:textSize="25sp" android:textColor="#ffff" android:layout_gravity="center" /> <TextView android:id="@+id/cart_tishi" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:text="购物车空空如也" android:layout_below="@id/title" android:visibility="gone" /> <ListView android:id="@+id/cart_lisrview" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:layout_below="@id/title" android:layout_above="@id/end" > </ListView> <LinearLayout android:id="@+id/end" android:layout_width="match_parent" android:layout_height="50dp" android:layout_alignParentBottom="true" android:orientation="horizontal"> <CheckBox android:id="@+id/cb" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/cart_spzj" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="3" android:gravity="center" android:text="共0件商品,共计0元" /> <Button android:id="@+id/cart_jiesuan" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:text="去结算" android:onClick="JS" android:textColor="#ffff" android:background="#FF5001" /> </LinearLayout> </LinearLayout>接下来就是javaBean包的文件
private String name; private int Price; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getPrice() { return Price; } public void setPrice(int price) { Price = price;
适配器Adapter文件
public class CartAdapter extends BaseAdapter { private CarActivity mContext; private List<User> mList; private int aa = 1; public CartAdapter(CarActivity context, List<User> list) { mContext = context; mList = list; } @Override public int getCount() { return mList.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(final int position, View convertView, ViewGroup parent) { ViewHolder holder=null; if(convertView==null){ convertView=View.inflate(mContext, R.layout.cart_item,null); holder=new ViewHolder(); holder.name = (TextView)convertView.findViewById(R.id.cart_item_name1); holder.price = (TextView)convertView.findViewById(R.id.cart_item_price1); holder.image = (ImageView)convertView.findViewById(R.id.cart_item_image1); holder.shu = (TextView)convertView.findViewById(R.id.cart_item_shushu); holder.jia = (Button)convertView.findViewById(R.id.cart_item_jiajia); holder.jian = (Button)convertView.findViewById(R.id.cart_item_jianjian); holder.shu = (TextView)convertView.findViewById(R.id.cart_item_shushu); holder.num = (TextView)convertView.findViewById(R.id.cart_item_numnum); holder.DGZJ = (TextView)convertView.findViewById(R.id.cart_item_zongji1); holder.delete1 = (TextView)convertView.findViewById(R.id.cart_item_delete1); convertView.setTag(holder); }else{ holder=(ViewHolder)convertView.getTag(); } holder.name.setText(mList.get(position).getName()); holder.price.setText(mList.get(position).getPrice()+""); holder.DGZJ.setText("共計1件商品,共計"+mList.get(position).getPrice()+"元"); final ViewHolder finalHolder = holder; final ViewHolder finalHolder1 = holder; final ViewHolder finalHolder2 = holder; final ViewHolder finalHolder3 = holder; holder.jia.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //获取当前的数量 int count =Integer.parseInt(finalHolder3.shu.getText().toString()) ; //每点击一次数量加一 ++count; //设置item中对应的数值 finalHolder.shu.setText(""+count); finalHolder1.num.setText("X"+count); //计算当前数量商品的总价 int b=mList.get(position).getPrice(); float c = b*count; //设置商品总价 finalHolder2.DGZJ.setText("共计"+count+"件商品,共计"+c+"元"); //获取当前Fragment所在的Activity //利用得到的Fragment调用在Fragment中写的方法 //传的为正负值,便于累计计算 mContext.setData(1, (int) b); } }); holder.jian.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int count =Integer.parseInt(finalHolder3.shu.getText().toString()) ; if(count>0) { --count; finalHolder.shu.setText(""+count); finalHolder1.num.setText("X"+count); int b=mList.get(position).getPrice(); float c = b*count; finalHolder2.DGZJ.setText("共计"+count+"件商品,共计"+c+"元"); mContext.setData(-1, (int) -b); }else if(count <= 0){ Toast.makeText(mContext,"最小数量",Toast.LENGTH_LONG).show(); } } }); holder.delete1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(mContext,"点击删除",Toast.LENGTH_LONG).show(); float b=mList.get(position).getPrice(); mContext.setData(-1, (int) -b); mContext.setDelete(position); } }); return convertView; } class ViewHolder{ Button jia,jian; TextView name,price,shu,num,DGZJ,delete1,jiajian; ImageView image; }
最后就是Activity的实现了
public class CarActivity extends AppCompatActivity { private List<User> list; private CartAdapter adapter; private ListView listView; private TextView spzj; private int sum; private int price; private Button jiesuan; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_car); listView = (ListView)findViewById(R.id.cart_lisrview); spzj = (TextView)findViewById(R.id.cart_spzj); jiashuju(); } private void jiashuju() { list = new ArrayList<>(); User user=new User(); // RlvBean user = new RlvBean(); user.setName("百达翡丽"); // user.getStories().add((RlvBean.StoriesEntity) getTitle()); user.setPrice(1200); list .add(user); User user1 = new User(); user1.setName("劳力士"); user1.setPrice(4500); list.add(user1); adapter = new CartAdapter(this, list); listView.setAdapter(adapter); //给控件设置初始值 for(int i = 0; i <list.size();i++){ price+= list.get(i).getPrice(); } sum = list.size(); spzj.setText("共计"+sum+"件商品,共计"+price+"元"); } //自定义的方法,接收Adapter传过来的数据 public void setData(int a ,int b){ sum+=a; price+=b; spzj.setText("共计"+sum+"件商品,共计"+price+"元"); } //自定义的方法,接收Adapter传过来的数据 public void setDelete(int a){ list.remove(a); adapter.notifyDataSetChanged(); } }