组合式控件(购物车数量的加减)

运用组合式控件编写一个类似于购物车的增加删除数量的效果,如图所示: 组合式控件(购物车数量的加减)
文章图片




MainActivity中



public class MainActivity extends AppCompatActivity { private viewjia av; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); av = (viewjia) findViewById(R.id.jia); //调用MaxValue可以设置最大值 av.setMaxValue(10); av.setOnNumberChangerListener(new viewjia.OnNumberChangerListener() { @Override public void OnNumberChanger(int value) { //属于我自己的业务逻辑 Toast.makeText(MainActivity.this, "变化的数量值"+value, Toast.LENGTH_SHORT).show(); } }); } }



MainXML






【组合式控件(购物车数量的加减)】
类继承一个属于ViewGroup下的任意自定义控件

public class viewjia extends LinearLayout implements View.OnClickListener {private ImageButton mIv_sub; private ImageButton mIv_add; private TextView mTv_value; private int mValue; //1.创建对象的时候 public viewjia(Context context) { this(context, null); }//2.XML中使用的时候回调 public viewjia(Context context, AttributeSet attrs) { this(context, attrs ,0); }//3.XML中使用,且使用Style风格中. public viewjia(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initView(context); }private void initView(Context context) { //把一个布局文件实例化,并且加载到AddSuVIew类中 View inflate = View.inflate(context, R.layout.item, this); //初始化控件 mIv_sub = (ImageButton) inflate.findViewById(R.id.iv_sub); mIv_add = (ImageButton) inflate.findViewById(R.id.iv_add); mTv_value = https://www.it610.com/article/(TextView) inflate.findViewById(R.id.tv_value); mIv_add.setOnClickListener(this); mIv_sub.setOnClickListener(this); //获取Valueint value = https://www.it610.com/article/getValue(); //设置valus的值 setValue(value); } //当前数量值,默认为1,设置对此值获取. private int value =https://www.it610.com/article/1; private int mMaxValue =5; private int mMinValue =1; //mMaxValue设个有参方法,这样可以在主页面调用,随意改变最大值参数 public void setMaxValue(int maxValue) { mMaxValue = https://www.it610.com/article/maxValue; }/** * 这里获取Value是从UI那里拿到值 * @return */ public int getValue() { String trim = mTv_value.getText().toString().trim(); if (!TextUtils.isEmpty(trim)){ //获取出来,因为其值是字符串,所以要进行Int型转换 value =https://www.it610.com/article/Integer.valueOf(trim); } return value; }public void setValue(int value) { mValue = value; mTv_value.setText(value+""); }//ImageView按钮的点击事件 @Override public void onClick(View view) { switch (view.getId()) { //添加 case R.id.iv_add: addNumber(); break; //减少 case R.id.iv_sub: subNumber(); break; default: break; } } private void addNumber() { if (value < mMaxValue) { value++; } setValue(value); if (mOnNumberChangerListener !=null){ mOnNumberChangerListener.OnNumberChanger(value); } } private void subNumber() { if (value > mMinValue){ value--; } setValue(value); //当按钮是Value值发生变化时,回调该接口方法 if (mOnNumberChangerListener !=null){ mOnNumberChangerListener.OnNumberChanger(value); } }/** * B.定义接口,及所要调用的接口方法,当商品数量发生变化时,回调给接口 */ public interface OnNumberChangerListener{ void OnNumberChanger(int value); }//定义接口对象 private OnNumberChangerListener mOnNumberChangerListener; //设置方法接收外界传来的接口对象方法 public void setOnNumberChangerListener(OnNumberChangerListener onNumberChangerListener){ mOnNumberChangerListener =onNumberChangerListener; }}

自定义控件的布局 R.layout.item



图片可以自己下载使用,想用我这个图片的,请私信联系我。
MainXML





    推荐阅读