• Android基础—— 自定义RecyclerView内部控件的监听器


    RecyclerView内部控件的监听器要写在对应的Adapter中

    1.在Adapter里写好要用的回调接口

    public interface OnItemClickListener1{ // 进入商品详情监听
            public void onItemClick(int pos);
        }
        public interface OnItemClickListener2{ // 添加到购物车监听
            public void onItemClick(int pos);
        }
        OnItemClickListener1 onItemClickListener1;
        public void setOnItemClickListener1(OnItemClickListener1 onItemClickListener1) {
            this.onItemClickListener1 = onItemClickListener1;
        }
        OnItemClickListener2 onItemClickListener2;
        public void setOnItemClickListener2(OnItemClickListener2 onItemClickListener2) {
            this.onItemClickListener2 = onItemClickListener2;
        }

    2.在构造ViewHolder时给对应的控件注册OnClick监听,在OnClick里面调用上面写好的接口

    public ViewHolder(View view){
                super(view);
                cardView = (CardView)view;
                coffeeImage = (ImageView)view.findViewById(R.id.coffee_image);
                coffeeName = (TextView)view.findViewById(R.id.coffee_name);
                coffeePrice = (TextView)view.findViewById(R.id.coffee_price);
                addToCart = view.findViewById(R.id.add_to_cart);
                // 设置点击监听事件
                coffeeImage.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if(onItemClickListener1!=null)
                            onItemClickListener1.onItemClick(getAdapterPosition());
                    }
                });
                addToCart.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if(onItemClickListener2!=null)
                            onItemClickListener2.onItemClick(getAdapterPosition());
                    }
                });
            }

    3.外界调用时,就可以选择是否给这些控件注册我们自己定义的监听器,只要调用Adapter对象的setOnItemClickListener方法注册就行

    例子为Adapter的构造函数里set,在其他地方同理

     public CoffeeAdapter(List<Coffee> list,Context context){
            mCoffeeList = list;
            mContext = context;
            setOnItemClickListener1(new OnItemClickListener1() {
                @Override //点击图片
                public void onItemClick(int pos) {
                    Coffee coffee = list.get(pos);
                    Intent intent = new Intent(mContext, CoffeeInfoActivity.class);
                    Bundle bundle = new Bundle();
                    bundle.putSerializable("coffee",coffee);
                    intent.putExtras(bundle);
                    mContext.startActivity(intent);
                }
            });
            setOnItemClickListener2(new OnItemClickListener2() {
                @Override //点击按钮添加到购物车
                public void onItemClick(int pos) {
                    CartStorage.getInstance().addData(list.get(pos));
                    QBadgeView qBadgeView = ((MainActivity)mContext).getqBadgeView();
                    Log.d(TAG, "onItemClick: "+qBadgeView.getBadgeNumber());
                    Toast.makeText(mContext, "添加成功", Toast.LENGTH_SHORT).show();
                }
            });
        }
  • 相关阅读:
    ICMP协议
    观察者模式-Observer
    模板方法模式-Template Method
    Java的演变过程
    汉诺塔-Hanoi
    外观模式-Facade
    JDK5-增强for循环
    JDK5-可变参数
    动态代理与AOP
    代理模式-Proxy
  • 原文地址:https://www.cnblogs.com/zsben991126/p/12961961.html
Copyright © 2020-2023  润新知