View.getId() 不工作

View.getId() not working

我是 android 编程新手。我想更新 recyclerview 的卡片视图布局中的项目。这是 recyclerview

的 ListRowViewHolder
public static class ListMenuRowViewHolder extends RecyclerView.ViewHolder
{
        protected NetworkImageView thumbnail;
        protected TextView itemname;
        protected TextView price;
        protected TextView itemtype;
        protected TextView quantity;
        protected ImageView add;
        protected ImageView sub;
        protected ImageView imageView;
        protected CardView item_layout;

        public ListMenuRowViewHolder(View itemView) {
            super(itemView);


            this.thumbnail=(NetworkImageView)itemView.findViewById(R.id.recom);
            this.imageView=(ImageView)itemView.findViewById(R.id.categ);
            this.itemname=(TextView)itemView.findViewById(R.id.itemvalue);
            this.add=(ImageView)itemView.findViewById(R.id.add);
            this.sub=(ImageView)itemView.findViewById(R.id.sub);
            this.price=(TextView)itemView.findViewById((R.id.price));
            this.quantity=(TextView)itemView.findViewById((R.id.quantity));
            this.item_layout=(CardView)itemView.findViewById((R.id.item_layout));
            itemView.setClickable(true);
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Log.e("myname", "rohit");
                    ItemscardClickListener.onClick(v, getAdapterPosition());
                }
            });

        }

    }

这是我尝试更新数量的地方

 mAdapter.setItemsCardClickListener(new ItemsCardClickListener() {
                @Override
                public void onClick(View v, int position) {

                    int q;
                    switch (v.getId())
                    {
                        case R.id.add : q= Integer.parseInt(mAdapter.getmOrder().get(position).getQuantity());
                            q++;
                            Log.e("mishra", String.valueOf(q));
                            mAdapter.getmOrder().get(position).setQuantity(String.valueOf(q));
                            mAdapter.notifyDataSetChanged();
                            break;
                        case R.id.sub : q=Integer.parseInt(mAdapter.getmOrder().get(position).getQuantity());
                            if(q>0)
                                q--;
                            mAdapter.getmOrder().get(position).setQuantity(String.valueOf(q));
                            mAdapter.notifyDataSetChanged();
                            break;
                        case R.id.quantity:
                            Log.e("mishra", "hihi");
                            break;
                        default:Log.e("mishra", "hi");


                    }
                }
            });

每次当我点击视图中的一个项目时,它们都会被点击,但我没有使用 v.getId() 获取 ID。交换机始终进入默认情况。请提供一些解决方案。

您在包含所有其他子视图的 View 上设置 OnClickListener,而不是在各个子视图本身上设置。您应该让 ListMenuRowViewHolder 实现 View.OnClickListener 并在每个单独的视图上设置一个侦听器,如下所示:

sub.setOnClickListener(this);
price.setOnClickListener(this);
//etc

你可以实施

@Override
public void onClick(View v) {
    //Now the correct subview gets passed to your switch in the Activity
    ItemscardClickListener.onClick(v, getAdapterPosition());
}

ListMenuRowViewHolder.

所以它看起来像这样:

public static class ListMenuRowViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    protected NetworkImageView thumbnail;
    protected TextView itemname;
    protected TextView price;
    protected TextView itemtype;
    protected TextView quantity;
    protected ImageView add;
    protected ImageView sub;
    protected ImageView imageView;
    protected CardView item_layout;

    public ListMenuRowViewHolder(View itemView) {
        super(itemView);

        this.thumbnail = (NetworkImageView) itemView.findViewById(R.id.recom);
        this.imageView = (ImageView) itemView.findViewById(R.id.categ);
        this.itemname = (TextView) itemView.findViewById(R.id.itemvalue);
        this.add = (ImageView) itemView.findViewById(R.id.add);
        this.sub = (ImageView) itemView.findViewById(R.id.sub);
        this.price = (TextView) itemView.findViewById(R.id.price);
        this.quantity = (TextView) itemView.findViewById(R.id.quantity);

        this.add.setOnClickListener(this);
        this.sub.setOnClickListener(this);
        //Do this for each view
    }

    @Override
    public void onClick(View v) {
        Log.e("myname", "rohit");
        ItemscardClickListener.onClick(v, getAdapterPosition());
    }
}

您正在设置容器 (itemView) 的点击侦听器。您需要在您的个人视图上设置点击侦听器:

this.add.setOnClickListener(mListener);
this.sub.setOnClickListener(mListener);
this.price.setOnClickListener(mListener);
this.quantity.setOnClickListener(mListener);

然后声明一个监听器:

View.OnClickListener mListener = new View.OnClickListener() {
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.add:
               break;
            case R.id.sub:
               break;
            // add others
        }
    }
}