我有一个放置在 RecyclerView 下的项目列表。 在任何项目上,都有一个数量(增加或减少)。 选择添加时,数量应增加一。

在此处输入图片说明

但是当我第一次单击“+”时,数量的值设置为 1,并在重置为 0 后不久,但是当我第二次单击时,该值变为“1”。 同样,当我下次单击该值设置为 2 时,在几分之一秒后它仍然变为 1,我再次单击该值变为 2 时。为什么第一次单击没有被识别? 有人可以在这里帮助我吗?

public class ItemListAdapter  extends RecyclerView.Adapter<ItemListAdapter.ItemViewHolder>{

    private Context mContext;
    private List<Items> itemsList;
    private OnItemListListner onClick;

    public ItemListAdapter(Context mContext,List<Items> itemsList)
    {
        this.mContext=mContext;
        this.itemsList=itemsList;
    }

    @NonNull
    @Override
    public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater inflater=LayoutInflater.from(mContext);
        View view=inflater.inflate(R.layout.item_details_layout,null);
        return new ItemListAdapter.ItemViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull final ItemViewHolder holder, final int position) {
        Items items=itemsList.get(position);
        Log.d("onBindViewHolder",items.getItemName());
        holder.itemNameTV.setText(items.getItemName());
        String strItemPrice=mContext.getResources().getString(R.string.Rs)+" "+String.valueOf(items.getItemPrice());
        holder.itemPriceTV.setText(strItemPrice);
        holder.itemDescTV.setText(items.getItemDescription());

        Glide.with(mContext).load(items.getItemImagePath()).into(holder.imageView);

        holder.itemAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int intCurrentQuantity=Integer.valueOf(holder.itemQuantity.getText().toString());
                intCurrentQuantity+=1;
                Log.d("myQuantity",String.valueOf(intCurrentQuantity));
                holder.itemQuantity.setText(String.valueOf(intCurrentQuantity));
                notifyItemChanged(holder.getAdapterPosition());
            }
        });


        holder.itemNameTV.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onClick.onItemListClick(position);
            }
        });
        holder.itemPriceTV.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onClick.onItemListClick(position);
            }
        });
        holder.itemDescTV.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onClick.onItemListClick(position);
            }
        });
        holder.imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onClick.onItemListClick(position);
            }
        });
    }

    @Override
    public int getItemCount() {
        return itemsList.size();
    }

    public void SetOnClick(OnItemListListner onClick)
    {
        this.onClick=onClick;
    }

    class ItemViewHolder extends RecyclerView.ViewHolder {

        ImageView imageView;
        TextView itemNameTV,itemPriceTV,itemDescTV,itemQuantity,itemSubtract,itemAdd;

        public ItemViewHolder(@NonNull View itemView) {
            super(itemView);

            imageView=itemView.findViewById(R.id.itemImageView);
            itemNameTV=itemView.findViewById(R.id.itemNameTextView);
            itemPriceTV=itemView.findViewById(R.id.itemPriceTextView);
            itemDescTV=itemView.findViewById(R.id.itemDescritionTextView);
            itemQuantity=itemView.findViewById(R.id.itemQuantity);
            itemSubtract=itemView.findViewById(R.id.subtractQuantity);
            itemAdd=itemView.findViewById(R.id.addQuantity);
        }
    }

    public interface OnItemListListner{
        void onItemListClick(int position);
    }

}

#1楼 票数:1

查看了您的代码,然后在我同意 Harsh 的回答之后,有两种方法可以设置您的适配器。 最常用于存储和检索数据的模型。

您需要创建一个模型类并首先将数据设置到模型中,然后从模型中获取数据并设置到您的适配器中/通知您的适配器。

您需要在模型类中创建一个变量,如下所示:

public class Item {
    String mQty = "";
    public String getmQty() {
        return mQty;
    }

    public void setmQty(String mQty) {
        this.mQty = mQty;
    }
}

有用的答案: 点我

#2楼 票数:1

您应该在 Item 模型类中拥有数量属性,并且必须遵循我在下面添加的代码。

holder.itemAdd.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int quantity = item[getAdapterPosition()].quantity;
quantity = quantity +1;
item[getAdapterPosition()].setQuantity(quantity);
notifyItemChanged(getAdapterPosition());
        }
    });

谢谢。我相信这对你有用。

#3楼 票数:0

检查更新的代码

 holder.itemAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int intCurrentQuantity=Integer.valueOf(holder.itemQuantity.getText().toString());
                ++intCurrentQuantity; //use this    
                Log.d("myQuantity",String.valueOf(intCurrentQuantity));
                holder.itemQuantity.setText(String.valueOf(intCurrentQuantity));
                notifyItemChanged(holder.getAdapterPosition());
            }
        });

#4楼 票数:0 已采纳

回收器视图回收滚动视图并重置其内容,因此您必须保留数量qty变量。 你可以通过两种方式做到

  1. 将数量存储在您的Items模型中。
  2. 在单独的HashMapitem.getId()数量作为item.getId()作为键和qty作为值。

然后从模型对象或哈希图中获取和设置。

  ask by Uday translate from so

未解决问题?本站智能推荐:

6回复

onclicklistener关于android中的recyclerview的具体项目

我将问一个非常基本的问题,但我长期陷入其中。 卡片视图后,有一个循环视图,每行有2个图像。 现在我想在图像而不是recycleview上创建点击监听器。 此活动的相应布局(layout_main.xml)(MainActivity.java)仅包含recyclerview。 每行
2回复

RecyclerView和Admob项目:onClickListener问题

我在RecyclerView ItemList内添加了NativeExpressAdView但是现在NativeExpressAdView干扰了NativeExpressAdView 。 我的“常规”项目包括文字和一个较大的图片。 单击较大的图像时,将打开一个DialogFragment并显
3回复

如何使用过滤的RecyclerView和OnClickListener从ArrayList中删除项目

检查下面的更新。 我正在制作一个用于爬楼梯挑战的应用程序,该应用程序可以跟踪执行的日期和步骤数(用户输入,不是自动的)。 我有一个ArrayList存储的对象包含以下三个变量: 该应用程序有两个输入按钮,一个用于整数步输入,一个用于日期选择。 创建了一个简单的方法,可以按选定的日期过
1回复

如何为recyclerview中动态添加的项目设置OnclickListener?

在我的应用程序中,我使用回收器视图来显示一些数据,并且对于回收器视图中的每个项目,我添加了一个选中文本视图的列表。 这些检查的文本视图是根据提供的列表大小添加的,并且工作正常。 现在我想为这些项目添加点击监听器以了解它们是否被选中? 当项目被检查时,那些被检查的项目应该被带到另一个活动中。 但是现在
1回复

片段中RecyclerView中的OnClickListener

我创建了主从流程,在Master Fragment中,我有一个RecyclerView。 我在RecyclerView中设置ClickListener时遇到问题。 我不确定是否遗漏了一些琐碎的问题或存在更大的问题,但是几乎相同的代码在标准Activity(超出Fragment)中可以完美
6回复

RecyclerView中的CardView和OnClickListener问题

我使用CardView布局作为RecyclerView的Row。 但是,我在将OnClickListener附加到布局时遇到问题。 我正在使用以下布局 以下是我的适配器和ViewHolder 但是这个onClick永远不会被解雇。 但是,如果我用LinearLayout替换Car
3回复

RecyclerView.ViewHolder中的onClickListener

我有一个RecyclerView.ViewHolder和RecyclerView.Adapter,单击该项目后需要,然后将有关该项目的信息发送到另一个Activity 。 PlacesAdapter.java PlacesViewHolder.java 在这一行中"intent.pu
6回复

在活动中定义RecyclerView的onCLickListener

RecyclerView 与 ListView 不同,因为它不提供 onItemCLickListener 类来处理单击事件。 通过在 ViewHolder 中定义一个 onClickListener,如果单击项目时在幕后发生的事情不多,则可以解决此问题。 如果文本或任何必须传递给下一个 Acti