购物车加减

194 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

在安卓开发中关于商城的APP经常会有购物车的功能,对于物品的加减按钮也是会经常用到的,所以我就把他封装了一下弄成了一个工具类,这样每次使用的使用的时候直接使用封装好的控件就行了,这样提高了开发效率。

//工具类

public class ShopCar extends LinearLayout{
    private OnShopCarClickListener listener;
    private EditText ed_number;
    private String numberStr;

    public void OnShopCarClickListener(OnShopCarClickListener listener) {
        if(listener!=null){
            this.listener = listener;
        }
    }
    public interface OnShopCarClickListener{
        void onAddClick(View v);
        void onDelClick(View v);
    }
    public ShopCar(Context context) {
        this(context,null);
    }

    public ShopCar(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs,0);
    }

    public ShopCar(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initView(context, attrs, defStyleAttr);
    }
    private void initView(Context context, AttributeSet attrs, int defStyleAttr) {
        View.inflate(context, R.layout.item_add_cut,this);
        Button btn_add=findViewById(R.id.btn_add);
        Button btn_cut=findViewById(R.id.btn_cut);
        ed_number=findViewById(R.id.et_number);

        //styleable.AddDeleteViewStyle它是attrs里的样式
        TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.AddDeleteViewStyle);
        String left_text = typedArray.getString(R.styleable.AddDeleteViewStyle_left_text);
        String middle_text = typedArray.getString(R.styleable.AddDeleteViewStyle_middle_text);
        String right_text = typedArray.getString(R.styleable.AddDeleteViewStyle_right_text);
        btn_cut.setText(left_text);
        btn_add.setText(right_text);
        ed_number.setText(middle_text);
        //释放资源
        typedArray.recycle();
        btn_add.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                listener.onAddClick(view);
            }
        });
        btn_cut.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                listener.onDelClick(view);
            }
        });
    }
    /**
     * 对外提供设置EditText值的方法
     */
    public void setNumber(int number){
        if (number>=0){
            ed_number.setText(number+"");
        }
    }

    /**
     * 得到控件原来的值
     */
    public int getNumber(){
        int number = 0;
        try {
            numberStr = ed_number.getText().toString().trim();
            number = Integer.valueOf(numberStr);
        } catch (Exception e) {
            number = 0;
        }
        return number;
    }
}

styleable样式:values目录下新建attrs

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <declare-styleable name="AddDeleteViewStyle">
        <attr name="left_text" format="string"/>
        <attr name="right_text" format="string"/>
        <attr name="middle_text" format="string"/>
    </declare-styleable>

</resources>

//布局引用

<?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">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        >
        <Button
            android:id="@+id/btn_cut"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:text="-"
            android:textSize="20dp"
            android:background="@android:color/holo_purple"
            />
        <EditText
            android:id="@+id/et_number"
            android:layout_width="50dp"
            android:inputType="number"
            android:layout_height="wrap_content"
            android:gravity="center"
            />
        <Button
            android:id="@+id/btn_add"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:text="+"
            android:textSize="20dp"
            android:background="@android:color/holo_purple"
            />
    </LinearLayout>
</LinearLayout>

代码实现

num.OnShopCarClickListener(new ShopCar.OnShopCarClickListener() {
            @Override
            public void onAddClick(View v) {
                int number = num.getNumber();
                number++;
                num.setNumber(number);
            }

            @Override
            public void onDelClick(View v) {
                int number = num.getNumber();
                number--;
                num.setNumber(number);
            }
        });