购物车的主要业务逻辑

MainActivity的代码

package com.example.shop;

import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

import java.util.ArrayList;
import java.util.List;

public class Main2Activity extends AppCompatActivity {


    private static final String TAG = "Main2Activity";
    private TextView edit;
    private TextView countPrice;
    private ListView lv;
    private LinearLayout ll;
    private Button all;
    private Button invert;
    private Button noAll;
    private Button send;

    private List<Food> foodList;


    private boolean[] checked = new boolean[]{false,false,false};

    private boolean flag = false;

    private MyAdapter myAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);



        edit = (TextView) findViewById(R.id.edit);
        countPrice = (TextView) findViewById(R.id.countPrice);
        lv = (ListView) findViewById(R.id.lv);
        ll = (LinearLayout) findViewById(R.id.ll);
        all = (Button) findViewById(R.id.all);
        invert = (Button) findViewById(R.id.invert);
        noAll = (Button) findViewById(R.id.noAll);
        send = (Button) findViewById(R.id.send);


        //全选
        /**
         * true false false
         */
        all.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                for (int i = 0; i < checked.length; i++) {
                    if(i==0){
                        checked[i] = true;
                    }else{
                        checked[i] = false;
                    }
                }

                myAdapter.notifyDataSetChanged();
            }
        });
        /**
         * false true false
         */
        invert.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                for (int i = 0; i < checked.length; i++) {
                    if(i==1){
                        checked[i] = true;
                    }else{
                        checked[i] = false;
                    }
                }

                myAdapter.notifyDataSetChanged();
            }
        });

        /**
         * false false true
         */



        edit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(flag){
                    flag = false;
                    myAdapter.notifyDataSetChanged();
                }else{
                    flag = true;
                    myAdapter.notifyDataSetChanged();
                }
            }
        });


         foodList = new ArrayList<>();

        //数据源
        for (int i = 0; i < 10; i++) {
            Food food = new Food();
            food.setNum(0);
            food.setChecked(false);
            food.setPrice(10.0);
            food.setTitle("标题");
            food.setType(i % 2);
            foodList.add(food);
        }

        //json -->对象


        myAdapter = new MyAdapter();
        lv.setAdapter(myAdapter);

    }

    class MyAdapter extends BaseAdapter{

        @Override
        public int getCount() {
            return foodList.size();
        }

        @Override
        public Object getItem(int position) {
            return foodList.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }


        @Override
        public int getItemViewType(int position) {
            return foodList.get(position).getType();
        }

        @Override
        public int getViewTypeCount() {
            return 2;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            ViewHolder viewHolder = null;
            ViewHolder2 viewHolder2 = null;
            if (convertView == null) {
                if (foodList.get(position).getType() == 0) {
                    viewHolder2 =  new ViewHolder2();
                    convertView = LayoutInflater.from(Main2Activity.this).inflate(R.layout.title_layout, null);
                    viewHolder2.name = convertView.findViewById(R.id.t);
                    convertView.setTag(viewHolder2);
                    viewHolder2.name.setText(foodList.get(position).getTitle());
                } else {
                    viewHolder = new ViewHolder();
                    convertView = LayoutInflater.from(Main2Activity.this).inflate(R.layout.lv_layout, null);
                    viewHolder.title = convertView.findViewById(R.id.title);
                    viewHolder.select = convertView.findViewById(R.id.select);
                    viewHolder.sub = convertView.findViewById(R.id.sub);
                    viewHolder.add = convertView.findViewById(R.id.add);
                    viewHolder.count = convertView.findViewById(R.id.count);
                    viewHolder.price = convertView.findViewById(R.id.price);
                    convertView.setTag(viewHolder);

                }

            }else{
                if (foodList.get(position).getType() == 0) {
                    viewHolder2 = (ViewHolder2) convertView.getTag();
                    viewHolder2.name.setText(foodList.get(position).getTitle());

                } else {
                    viewHolder = (ViewHolder) convertView.getTag();
                    viewHolder.price.setText(foodList.get(position).getPrice() + "");
                }
            }


            //主要的逻辑
            if (foodList.get(position).getType() == 0) {
                viewHolder2 = (ViewHolder2) convertView.getTag();
                viewHolder2.name.setText(foodList.get(position).getTitle());

            } else {
                viewHolder = (ViewHolder) convertView.getTag();
                viewHolder.price.setText(foodList.get(position).getPrice() + "");


                //没有的时候不用操作
                if (flag){
                    viewHolder.select.setVisibility(View.VISIBLE);


                    Food food = Share.map.get(position);
                    if(food != null){
                        viewHolder.count.setText(food.getNum()+"");
                    }


                    //全选的逻辑

                    /**
                     * 谁是true 就执行谁.
                     */

                    for (int i = 0; i < checked.length ; i++) {

                        /**
                         * 如果是全选的话,全选boolean值为真,其他两个为假
                         */
                        if(checked[i] && i==0){
                            viewHolder.select.setChecked(true);
                        }
                        //反选的逻辑

                        if(checked[i] && i ==1){
                            Log.i(TAG, "getView: ---");
                            //是否已经选择
                            if(viewHolder.select.isChecked()){
                                viewHolder.select.setChecked(false);
                            }else{
                                viewHolder.select.setChecked(true);
                            }
                        }

//                        if(d){
//                            viewHolder.select.setChecked(false);
//                        }
                    }

                    

                    //点击事件
                    viewHolder.add.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {

                            Food food = foodList.get(position);
                            double price = food.getPrice();
                            food.setNum(food.getNum() +1);


                            //保留当前操作过的对象
                            Share.map.put(position,food);

                            //保持总价
                            Share.p += price;
                            countPrice.setText(Share.p+"");

                            //刷新适配器
                            notifyDataSetChanged();

                        }
                    });

                    //点击事件
                    viewHolder.sub.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {

                            Food food = foodList.get(position);
                            double price = food.getPrice();
                            food.setNum(food.getNum() -1);


                            //保留当前操作过的对象
                            Share.map.put(position,food);

                            //保持总价
                            Share.p -= price;
                            countPrice.setText(Share.p+"");

                            //刷新适配器
                            notifyDataSetChanged();

                        }
                    });



                }else{
                    viewHolder.select.setVisibility(View.INVISIBLE);
                }


            }
            return convertView;
        }

        class ViewHolder {
            TextView title;
            CheckBox select;
            TextView sub;
            TextView add;
            TextView count;
            TextView price;


        }

        class ViewHolder2 {
            TextView name;

        }
    }
}

布局文件xml


<?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=".Main2Activity">


    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/edit"
            android:text="编辑"
            android:textSize="20dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

        </TextView>

        <TextView
            android:id="@+id/countPrice"
            android:text="0.0"
            android:textSize="20dp"
            android:layout_marginLeft="30dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

        </TextView>
    </LinearLayout>


    <LinearLayout
        android:layout_weight="6"
        android:layout_width="match_parent"
        android:layout_height="0dp">

        <ListView
            android:id="@+id/lv"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

        </ListView>

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:id="@+id/ll">

        <Button
            android:id="@+id/all"
            android:text="全选"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"></Button>


        <Button
            android:id="@+id/invert"
            android:text="反选"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"></Button>

        <Button
            android:id="@+id/noAll"
            android:text="全部取消"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"></Button>

        <Button
            android:id="@+id/send"
            android:text="跳转"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"></Button>

    </LinearLayout>

</LinearLayout>

listView的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:orientation="horizontal"
    android:layout_height="match_parent">

    <CheckBox
        android:id="@+id/select"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="invisible"
        android:focusable="false"
        android:focusableInTouchMode="false"
        ></CheckBox>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/title"
        android:text="商品名字">

    </TextView>


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/sub"
        android:text=" - "
        android:layout_marginLeft="20dp"
        android:textSize="20dp"
        ></TextView>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="0"
        android:id="@+id/count"
        ></TextView>



    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/add"
        android:textSize="20dp"
        android:text=" + "></TextView>

    <TextView
        android:id="@+id/price"
        android:text="价格"
        android:layout_marginLeft="30dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

    </TextView>
</LinearLayout>

共享的类

package com.example.shop;

import java.util.HashMap;

public class Share {


    public static Double p = 0.0; //总价
    public static HashMap<Integer,Food> map = new HashMap<>();
}

实物类

package com.example.shop;

public class Food {

    private int num;
    private String title;
    private boolean checked;
    private double price;
    private int type;



    public boolean isChecked() {
        return checked;
    }

    public void setChecked(boolean checked) {
        this.checked = checked;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public int getType() {
        return type;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public void setType(int type) {
        this.type = type;
    }
}

标题的布局

<?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">

    <CheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/titleCheck"
        android:visibility="invisible"></CheckBox>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/t"
        android:text="我是店铺1"></TextView>

</LinearLayout>

发布了27 篇原创文章 · 获赞 16 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/shuai_ge_feng/article/details/103211587