购物车 自定义加减号View简单使用

xiaoxiao2025-07-27  21

**

在第二个适配器条目里放自定义的加减布局

**

<包名.zidingyi.JiaJianLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="100dp" android:gravity="center" android:id="@+id/jia_jian" ></包名.zidingyi.JiaJianLayout>

**

先写自定义view的条目

**

<?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" android:orientation="horizontal" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="+" android:id="@+id/jia" android:textSize="20sp" /> <EditText android:layout_width="50dp" android:layout_height="30dp" android:gravity="center" android:id="@+id/ed_sum" android:text="1" android:background="@drawable/yuan" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="-" android:id="@+id/jian" android:textSize="20sp" /> </LinearLayout> **

在写自定义View 的类 JiajianView

** 重写三个方法 加载布局 获取布局里的控件 并设置点击事件

//继承线性布局 实现前三个方法 public class JiaJianView extends LinearLayout implements View.OnClickListener { private TextView jia; private TextView jian; private EditText ed_sum; private Context context; private OnListener onListener; public JiaJianView(Context context) { super(context); //初始化数据传上下文 initView(context); } public JiaJianView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); //初始化数据传上下文 initView(context); } public JiaJianView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); //初始化数据传上下文 initView(context); } private void initView(Context context) { //记得获取上下文this. 上下文=上下文 提上去 this.context=context; //获取view inf 布局 返回值 View view = View.inflate(context, R.layout.jiajian_item, null); //用view 获取控件 强转 提上去 jia =(TextView) view.findViewById(R.id.jia); jian =(TextView) view.findViewById(R.id.jian); ed_sum=(EditText)view.findViewById(R.id.ed_sum); //给加减点击事件 和//去上面封装一个整型num jia.setOnClickListener(this); jian.setOnClickListener(this); //直接添加view addView(view); }

设置加减的点击事件

//封装一个整型num private int num; @Override public void onClick(View view) { //选择点击事件 switch (view.getId()){ case R.id.jia: num++; //给输入框赋值num+空字符串 ed_sum.setText(num+""); //给集合获取p 设置num listBean.get(p).setNum(num); //调用本页面接口 onListener.success(); //局部刷新适配器 传位置 rvAdapter4.notifyItemChanged(p); break; case R.id.jian: //判断num>1 if(num>1){ num--; }else{ //吐司显示 Toast.makeText(context,"没有了",Toast.LENGTH_SHORT).show(); } //给输入框赋值num+空字符串 ed_sum.setText(num+""); //给集合获取p 设置num listBean.get(p).setNum(num); //调用本页面接口 onListener.success(); //局部刷新适配器 传位置 rvAdapter4.notifyItemChanged(p); break; } }

再定义一个接口回调 不传数据

//回调方法 括号里实例化接口 如果第二个适配器有不传值的接口回调 就不用复制这个啦 public void setOnListener(OnListener onListener){ //this. 接口 返回值 提上去 this.onListener = onListener; } //定义一个接口 public interface OnListener{ //定义一个方法不传值 void success(); }

去第二个适配器里也写个这样的接口 如果第二个适配器有不传值的接口回调 就不用复制这个啦

在第二个适配器,先写内部类获取自定义加减view控件 在viewhorder里获取自定义的view控件

myViewHolder.jia_jian=view.findViewById(R.id.jia_jian); //内部类里的 JiaJianLayout jia_jian;

在第二个适配器 onBindViewHolder方法里面 用这个自定义控件调用回调接口 在直接调用本页面接口

//用这个自定义控件调用回调接口 myViewHolder2.jia_jian.setOnListener(new JiaJianView.OnListener() { @Override public void success() { //在直接调用本页面接口 onListListener.success(); } });

在上面的方法下面 定义一个setDate 并且实现方法在自定义控件里面

//给内部类加减控件 定义一个设置data方法 传this和本页面集合和i 然后实现方法到自定义控件里 myViewHolder2.jia_jian.setData(this,listBean,i);

生成setData方法

private RvAdapter4 rvAdapter4; private List<RvBean.DataBean.ListBean> listBean=new ArrayList<>(); //封装一个位置p整型 private int p; public void setData(RvAdapter4 rvAdapter4, List<RvBean.DataBean.ListBean> listBean, int i) { //this. 适配器=适配器 和this. 集合=集合 记得一定要实例化 this.rvAdapter4 = rvAdapter4; this.listBean = listBean; //去上面封装一个整型p =i p=i; //获取集合数量 返回上面定义的num num = listBean.get(i).getNum(); //再给控件重新赋值 ed_sum.setText(num+""); }
转载请注明原文地址: https://www.6miu.com/read-5033821.html

最新回复(0)