gpt4 book ai didi

android - onBindViewHolder() 上的位置不会随着项目删除而更新

转载 作者:行者123 更新时间:2023-11-29 01:18:41 27 4
gpt4 key购买 nike

我有一个 recyclerview 显示我的数据。在我的适配器类中,在 onBindViewHolder() 中,我为一个按钮创建了一个监听器,该按钮在单击时删除了一行。第一次工作得很好,但如果我尝试删除一个项目,位置值就好像列表的大小没有改变一样。

例如,我有一个 4 项列表。我删除了第三项(索引为 2)。第 4 个项目进入第 3 个槽,列表的大小变为 3。如果我尝试删除第 3 个项目,我得到一个 IndexOutOfBoundsException,因为项目位置没有更新,它的索引是仍然是 3,而大小是 3。

这是我的 onBindViewHolder() 方法的一部分代码:

public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
ItemRegistered item = registeredList.get(position);
if (holder.getItemViewType() == 0) {
final RegisteredViewHolder registeredViewHolder = (RegisteredViewHolder) holder;
registeredViewHolder.course.setText(item.getCourse());

registeredViewHolder.btn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {

DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which){
case DialogInterface.BUTTON_POSITIVE:

if (mButtonClickListener != null) {

Log.d("i", Integer.toString(position));
Log.d("list size:", Integer.toString(registeredList.size()));

final String title = registeredList.get(position).getCourse();
mButtonClickListener.onButtonClicked(title);
}

registeredList.remove(holder.getAdapterPosition());
notifyItemRemoved(position);
break;

case DialogInterface.BUTTON_NEGATIVE:
//No button clicked
break;
}
}
};

AlertDialog.Builder builder = new AlertDialog.Builder(registeredViewHolder.course.getContext());
builder.setMessage("Jeni të sigurtë që doni të çregjistroheni?").setPositiveButton("Po", dialogClickListener)
.setNegativeButton("Jo", dialogClickListener).show();

}
});
}
}

最佳答案

尝试从列表中删除项目,然后通知适配器。

那就是替换这行...

registeredList.remove(holder.getAdapterPosition());
notifyItemRemoved(position);

remove(position);

现在只需创建一个方法并添加逻辑..

public void remove(int position){
registeredList.remove(position);
notifyItemRemoved(position);
// to animate the list deletion
notifyItemRangeChanged(position, getItemCount());
}

希望对你有帮助:)

关于android - onBindViewHolder() 上的位置不会随着项目删除而更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38148634/

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