gpt4 book ai didi

java - RecyclerView 点击删除项目

转载 作者:行者123 更新时间:2023-12-02 03:09:45 25 4
gpt4 key购买 nike

我试图在单击时删除一个项目,但是它删除了一次,然后出现错误:

错误

Process: com.example.cardgame, PID: 3345
java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid item position 10(offset:10).state:11

代码

public class HandViewAdapter extends RecyclerView.Adapter<HandViewAdapter.ViewHolder>{
private ArrayList<Card> cards;
private Context context;

public HandViewAdapter(ArrayList<Card> cards, Context context) {
this.cards = cards;
this.context = context;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());

View cardView = inflater.inflate(R.layout.card, parent, false);

return new ViewHolder(cardView);
}

@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
Card card = this.cards.get(position);

if (position == 0) {
card.setStatus(CardStatus.down);
} else {
card.setStatus(CardStatus.up);
}

// Here i put the listener since i have tried other methods but i have no success to run them
holder.cardLayoutView.getCardView().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
remove(position);
}
});
}

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

public Card remove(int index) {
cards.remove(index);
notifyItemChanged(index);
notifyItemRangeChanged(index, cards.size());
return null;
}

public static class ViewHolder extends RecyclerView.ViewHolder implements CardBehavior {
public CardLayoutView cardLayoutView;

public ViewHolder(View view) {
super(view);
this.cardLayoutView = new CardLayoutView(view);

}

@Override
public void faceDown() {
this.cardLayoutView.faceDown();
}

@Override
public void faceUp(Card card, Context context) {
this.cardLayoutView.faceUp(card, context);
}
}

}

我知道删除第一项后它不会更新位置,它应该更新它们,对吗?但它没有,我该如何修复它?我将不胜感激任何帮助,谢谢!

最佳答案

使用notifyItemRemoved

notifyItemRemoved(index)

Notify any registered observers that the item previously located at position has been removed from the data set. The items previously located at and after position may now be found at oldPosition - 1.

然后

notifyItemRangeChanged(index, cards.size());

检查this stackoverflow answer

关于java - RecyclerView 点击删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41240251/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com