在回收站视图对象中保存项目值 android

Save item values in recycler view object android

我在回收站视图中工作,其中有递增和递减按钮。我的情况是最大不能加 10,最小不能加 0。当我在回收器视图中单击第一行项目的增量按钮时,它会加 1,但是当我在回收器视图中单击第二行项目时,它会首先影响列表项也是如此。假设 item1 变成 1 plus.

当我进行任何递增和递减时,它不应该影响 RecyclerView 中的其他行项目。

int counter = 0;

@Override
public void onBindViewHolder(final RecyclerView.ViewHolder  holder,final int position) {
    final ParseObject parseObject = arrayList.get(position);
    boolean like = true, dislike = true;
    if (holder instanceof MemberViewHolder) {
        if (arrayList.size() > 0) {
            ((MemberViewHolder) holder).txtIncrement.setOnClickListener(new TextView.OnClickListener() {
                @Override
                public void onClick(View view) {
                            counter += 1;
                            ((MemberViewHolder) holder).txtCounter.setText(counter+"");
                    }
            });
            ((MemberViewHolder) holder).txtDecrement.setOnClickListener(new TextView.OnClickListener() {
                @Override
                public void onClick(View view) {

                    if(counter == 0){

                    }else{
                        counter -= 1;
                        ((MemberViewHolder) holder).txtCounter.setText(counter+"");
                    }
                }
         });
     }
 }

当从第 1 项开始递减时,它也会递减第 2 行中的值。我想保留每个项目的值。

我建议为此使用地图。

private Map<Integer, Integer> countOfItems = new HashMap<>();

关键是项目在适配器中的位置。该值是该位置的项目数。

所以在你的 onBindViewHolder() 里面你必须做一些改变:

递增:

int currentCount = countOfItems.get(position);
currentCount++;
countOfItems.put(position, currentCount);

递减:

int currentCount = countOfItems.get(position);
if(currentCount > 0) {
  currentCount--;
  countOfItems.put(position, currentCount);
}

为适配器的构造函数中的每个项目初始化地图,计数为 0。

for(int i = 0; i < arrayList.size(); i++) {
  countOfItems.put(i, 0)
}

我是这样做的:

首先创建一个int[]类型的成员变量

private int[] counter = new int[10];

这里我给数组一个默认大小 10 。

重要提示:如果您尝试将项目增加到索引 10 以上,这将使您的应用程序崩溃。为避免这种情况,您需要为其指定 arrayList 的大小当您填充 arrayList 时(可能在适配器构造函数中)。

现在在你的 onBindViewHolder():

((MemberViewHolder) holder).txtIncrement.setOnClickListener(new TextView.OnClickListener() {
        @Override
        public void onClick(View view) {

                    counter[position] += 1;
                    ((MemberViewHolder) holder).txtCounter.setText(counter[position]+"");

        }
    });
    ((MemberViewHolder) holder).txtDecrement.setOnClickListener(new TextView.OnClickListener() {
        @Override
        public void onClick(View view) {

            if(counter[position] == 0){

            }else{
                counter[position] -= 1;
                ((MemberViewHolder) holder).txtCounter.setText(counter[position]+"");
            }
        }
    });                                                   
    ((MemberViewHolder) holder).txtCounter.setText(counter[position]+"");

希望对您有所帮助!