购物车---计数器

1.首先创建一个Layout Resource File,名字随便起,继承相应的布局(例如:线性布局);

2.布局里面写上相应内容

3.在values下创建Values Resource File
<resources>
     //name对应类的名称
    <declare-styleable name="AddMinus" >
         //name可自定义-----format对应布局中需要的参数类型
        <attr name="zi_dong" format="integer"></attr>
    </declare-styleable>
</resources>

4.创建一个类继承相应 布局(例如:线性布局,或者View,等...),重写布局的三个方法,第一个和第二个方法需要有所改动,然后在第三个方法中写逻辑代码,例如:

public class AddMinus extends LinearLayout {

    private TextView number;
    private ImageView one;
    private ImageView two;
    private int count;
    public AddMinus(Context context) {
        this(context,null);
    }

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

    public AddMinus(final Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        //加载第一步中写的布局
        inflate(context,R.layout.add_minus,this);
        //初始化布局中相应的控件
        number = findViewById(R.id.number);
        one = findViewById(R.id.ima_minus);
        two = findViewById(R.id.add);
        //参数attrs对应方法中@Nullable AttributeSet后的参数
        TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.AddMinus);
        //R.styleable.AddMinus_zi_dong对应第三步中创建的自定义名称
        count = typedArray.getInteger(R.styleable.AddMinus_zi_dong,0);
        typedArray.recycle();
        number.setText(String.valueOf(count));
        //对应控件的点击事件
        one.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                if (count>1){
                    count--;
                    number.setText(String.valueOf(count));
                }
            }
        });
        two.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                count++;
                number.setText(String.valueOf(count));
            }
        });
    }
}

5.最后在主Activity中实例下,例如:

AddMinus addMinus = new AddMinus(this);

加一下点击吐司

1.首先在创建的继承布局的类里面写一个返回接口和set方法,并且在加减的时候加上返回值,例如:

one.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            if (count>1){
                count--;
                number.setText(String.valueOf(count));
                if (callback!=null){
                    callback.showShopNum(count);
                }
            }
        }
    });
    two.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            count++;
            number.setText(String.valueOf(count));
            if (callback!=null){
                callback.showShopNum(count);
            }
        }
    });
}
//设置set方法
private AddMinusCallback callback;

public void setCallback(AddMinusCallback callback) {
    this.callback = callback;
}

//定义返回接口
public interface AddMinusCallback{
    void showShopNum(int shopNum);
}

2.在主Activity的布局中给子布局对象的控件id,并且主Activity中写子类的吐司方法,例如:

//初始化控件
addMinus = findViewById(R.id.add_d);
addMinus.setCallback(new AddMinus.AddMinusCallback() {
    @Override
    public void showShopNum(int shopNum) {
        Toast.makeText(MainActivity.this,"当前数"+shopNum,Toast.LENGTH_SHORT).show();
    }
});

猜你喜欢

转载自blog.csdn.net/H_BuilDer/article/details/82251652