在回收站视图对象中保存项目值 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]+"");
希望对您有所帮助!
我在回收站视图中工作,其中有递增和递减按钮。我的情况是最大不能加 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]+"");
希望对您有所帮助!