您的位置:首页 > 移动开发 > Android开发

Android Studio实现简单购物车功能

2018-07-10 15:38 1346 查看

本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下

MainActivity的布局文件

<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=".MainActivity">
<LinearLayout
android:id="@+id/top_bar"
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="#E24146"
android:orientation="vertical" >
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:minHeight="48dp"
android:text="购物车"
android:textColor="#ffffff"
android:textSize="17sp" />
</LinearLayout>
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:childIndicator="@null"
android:groupIndicator="@null" >
</ListView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal" >
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2.5"
android:gravity="center_vertical"
android:orientation="horizontal" >
<CheckBox
android:id="@+id/all_chekbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="10dp"
android:layout_marginRight="4dp"
android:checkMark="?android:attr/listChoiceIndicatorMultiple"
android:gravity="center"
android:minHeight="64dp"
android:paddingLeft="10dp"
android:textAppearance="?android:attr/textAppearanceLarge"
android:visibility="visible" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:text="合计:"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:id="@+id/tv_total_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="¥0.00"
android:textSize="16sp"
android:textStyle="bold" />
</LinearLayout>
<TextView
android:id="@+id/tv_delete"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:clickable="true"
android:background="#a29e9e"
android:gravity="center"
android:text="删除"
android:textColor="#FAFAFA" />
<TextView
android:id="@+id/tv_go_to_pay"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="#E24146"
android:clickable="true"
android:gravity="center"
android:text="付款(0)"
android:textColor="#FAFAFA" />
</LinearLayout>
</LinearLayout>

条目的布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#CCCCCC" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<CheckBox
android:id="@+id/check_box"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="10dp"
android:layout_marginRight="4dp"
android:checkMark="?android:attr/listChoiceIndicatorMultiple"
android:gravity="center"
android:minHeight="64dp"
android:minWidth="32dp"
android:textAppearance="?android:attr/textAppearanceLarge"
android:visibility="visible" />
<ImageView
android:id="@+id/iv_adapter_list_pic"
android:layout_width="85dp"
android:layout_height="85dp"
android:layout_marginBottom="15dp"
android:layout_marginTop="13dp"
android:scaleType="centerCrop"
android:src="@mipmap/ic_launcher"
/>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:layout_marginTop="10dp"
android:layout_marginLeft="13dp" >
<TextView
android:id="@+id/tv_goods_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:layout_marginTop="20dp"
android:ellipsize="end"
android:maxLines="2"
android:text="商品"
android:textSize="14sp" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="30dp"
android:orientation="horizontal" >
<TextView
android:id="@+id/tv_goods_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:singleLine="true"
android:textSize="14sp"
android:textStyle="bold"
android:text="价格"/>
<TextView
android:id="@+id/tv_type_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:layout_toRightOf="@+id/tv_goods_price"
android:singleLine="true"
android:textSize="10sp"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="15dp"
android:orientation="horizontal" >
<TextView
android:id="@+id/tv_reduce"
android:layout_width="25dp"
android:layout_height="25dp"
android:gravity="center"
android:background="#ccc"
android:text="一"
android:textSize="12sp" />
<TextView
android:id="@+id/tv_num"
android:layout_width="25dp"
android:layout_height="25dp"
android:gravity="center"
android:singleLine="true"
android:text="1"
android:textSize="12sp" />
<TextView
android:id="@+id/tv_add"
android:layout_width="25dp"
android:layout_height="25dp"
android:gravity="center"
android:text="十"
android:background="#ccc"
android:textSize="12sp" />
</LinearLayout>
</RelativeLayout>
</RelativeLayout>
</LinearLayout>
</LinearLayout>

CartAdapter适配器

public class CaetAdapter extends BaseAdapter {
private Context context;
private List<HashMap<String, String>> list;
private HashMap<String, Integer> pitchOnMap;
public HashMap<String, Integer> getPitchOnMap() {
return pitchOnMap;
}
public void setPitchOnMap(HashMap<String, Integer> pitchOnMap) {
this.pitchOnMap = pitchOnMap;
}
public CaetAdapter(Context context, List<HashMap<String, String>> list) {
this.context = context;
this.list = list;
pitchOnMap = new HashMap<>();
for (int i = 0; i < list.size(); i++) {
pitchOnMap.put(list.get(i).get("id"), 0);
}
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
convertView = View.inflate(context, R.layout.item_layout, null);
final CheckBox checkBox;
ImageView icon;
final TextView name, price, num, type, reduce, add;
checkBox = convertView.findViewById(R.id.check_box);
icon = convertView.findViewById(R.id.iv_adapter_list_pic);
name = convertView.findViewById(R.id.tv_goods_name);
price = convertView.findViewById(R.id.tv_goods_price);
type = convertView.findViewById(R.id.tv_type_size);
num = convertView.findViewById(R.id.tv_num);
reduce = convertView.findViewById(R.id.tv_reduce);
add = convertView.findViewById(R.id.tv_add);
name.setText(list.get(position).get("name"));
price.setText("¥ " + (Integer.valueOf(list.get(position).get("price"))) * (Integer.valueOf(list.get(position).get("count"))));
type.setText(list.get(position).get("type"));
num.setText(list.get(position).get("count"));
if(pitchOnMap.get(list.get(position).get("id"))== 0){
checkBox.setChecked(false);
}else{
checkBox.setChecked(true);
}
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(checkBox.isChecked()){
pitchOnMap.put(list.get(position).get("id"),1);
}else{
pitchOnMap.put(list.get(position).get("id"), 0);
}
mrefreshPriceInterface.refreshPrice(pitchOnMap);
}
});
//商品数量减
reduce.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (Integer.valueOf(list.get(position).get("count")) <= 1) {
Toast.makeText(context, "数量不能再减啦,只能删除!", Toast.LENGTH_SHORT).show();
} else {
list.get(position).put("count", (Integer.valueOf(list.get(position).get("count")) - 1) + "");
notifyDataSetChanged();
}
mrefreshPriceInterface.refreshPrice(pitchOnMap);
}
});
//商品数量加
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
list.get(position).put("count", (Integer.valueOf(list.get(position).get("count")) + 1) + "");
notifyDataSetChanged();
mrefreshPriceInterface.refreshPrice(pitchOnMap);
}
});
return convertView;
}
/**
* 创建接口
*/
public interface RefreshPriceInterface {
/**
* 把价格展示到总价上
* @param pitchOnMap
*/
void refreshPrice(HashMap<String, Integer> pitchOnMap);
}
/**
* 定义一个接口对象
*/
private RefreshPriceInterface mrefreshPriceInterface;
/**
* 向外部暴露一个方法
* 把价格展示到总价上
* @param refreshPriceInterface
*/
public void setRefreshPriceInterface(RefreshPriceInterface refreshPriceInterface) {
mrefreshPriceInterface = refreshPriceInterface;
}
}

MainActivity

public class MainActivity extends AppCompatActivity implements View.OnClickListener,CaetAdapter.RefreshPriceInterface{
private LinearLayout top_bar;
private ListView listview;
private CheckBox all_chekbox;
private TextView price;
private TextView delete;
private TextView tv_go_to_pay;
private List<User> goodsList;
private UserDao userDao;
private List<HashMap<String,String>> listmap=new ArrayList<>();
private CaetAdapter adapter;
private double totalPrice = 0.00;
private int totalCount = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
top_bar = (LinearLayout) findViewById(R.id.top_bar);
listview = (ListView) findViewById(R.id.listview);
all_chekbox = (CheckBox) findViewById(R.id.all_chekbox);
price = (TextView) findViewById(R.id.tv_total_price);
delete = (TextView) findViewById(R.id.tv_delete);
tv_go_to_pay = (TextView) findViewById(R.id.tv_go_to_pay);
all_chekbox.setOnClickListener(this);
delete.setOnClickListener(this);
tv_go_to_pay.setOnClickListener(this);
initDate();
adapter = new CaetAdapter(MainActivity.this, listmap);
listview.setAdapter(adapter);
adapter.setRefreshPriceInterface(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.all_chekbox:
AllTheSelected();
break;
case R.id.tv_delete:
checkDelete(adapter.getPitchOnMap());
break;
case R.id.tv_go_to_pay:
if(totalCount<=0){
Toast.makeText(this,"请选择要付款的商品~",Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(this,"付款成功",Toast.LENGTH_SHORT).show();
}
break;
}
}
/**
* 数据
*/
private void initDate() {
//创建集合
goodsList = new ArrayList<>();
//数据库
userDao = Myapplication.getInstances().getDaoSession().getUserDao();
userDao.deleteAll();
//数据源
for (int i = 0; i < 10; i++) {
//向数据库存放数据
User user = new User((long) i,
"购物车里的第" + (i + 1) + "件商品",
(i + 20) + "码",
"10",
"10");
userDao.insert(user);
}
//从数据库中把数据放到集合中
goodsList=userDao.loadAll();
//把结合中的数据放到HashMap集合中
for(int i=0;i<goodsList.size();i++){
HashMap<String,String> map=new HashMap<>();
map.put("id",goodsList.get(i).getId()+"");
map.put("name",goodsList.get(i).getName());
map.put("type",(goodsList.get(i).getType()));
map.put("price",goodsList.get(i).getPrice()+"");
map.put("count",goodsList.get(i).getCount()+"");
listmap.add(map);
}
}
@Override
public void refreshPrice(HashMap<String, Integer> pitchOnMap) {
priceControl(pitchOnMap);
}
/**
* 控制价格展示总价
*/
private void priceControl(Map<String, Integer> pitchOnMap){
totalCount = 0;
totalPrice = 0.00;
for(int i=0;i<listmap.size();i++){
if(pitchOnMap.get(listmap.get(i).get("id"))==1){
totalCount=totalCount+Integer.valueOf(listmap.get(i).get("count"));
double goodsPrice=Integer.valueOf(listmap.get(i).get("count"))*Double.valueOf(listmap.get(i).get("price"));
totalPrice=totalPrice+goodsPrice;
}
}
price.setText(" ¥ "+totalPrice);
tv_go_to_pay.setText("付款("+totalCount+")");
}
/**
* 删除 控制价格展示总价
* @param map
*/
private void checkDelete(Map<String,Integer> map){
List<HashMap<String,String>> waitDeleteList=new ArrayList<>();
Map<String,Integer> waitDeleteMap =new HashMap<>();
for(int i=0;i<listmap.size();i++){
if(map.get(listmap.get(i).get("id"))==1){
waitDeleteList.add(listmap.get(i));
waitDeleteMap.put(listmap.get(i).get("id"),map.get(listmap.get(i).get("id")));
}
}
listmap.removeAll(waitDeleteList);
map.remove(waitDeleteMap);
priceControl(map);
adapter.notifyDataSetChanged();
}
/**
*全选或反选
*/
private void AllTheSelected(){
HashMap<String,Integer> map=adapter.getPitchOnMap();
boolean isCheck=false;
boolean isUnCheck=false;
Iterator iter = map.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
if(Integer.valueOf(entry.getValue().toString())==1){
isCheck=true;
}else{
isUnCheck=true;
}
}
if(isCheck==true&&isUnCheck==false){//已经全选,做反选
for(int i=0;i<listmap.size();i++){
map.put(listmap.get(i).get("id"),0);
}
all_chekbox.setChecked(false);
}else if(isCheck==true && isUnCheck==true){//部分选择,做全选
for(int i=0;i<listmap.size();i++){
map.put(listmap.get(i).get("id"),1);
}
all_chekbox.setChecked(true);
}else if(isCheck==false && isUnCheck==true){//一个没选,做全选
for(int i=0;i<listmap.size();i++){
map.put(listmap.get(i).get("id"),1);
}
all_chekbox.setChecked(true);
}
priceControl(map);
adapter.setPitchOnMap(map);
adapter.notifyDataSetChanged();
}
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android Studio 购物车