我有一个回收器适配器,在视图项中有一个删除按钮(del)。 我在点击事件中使用以下代码。
@Override
public void onBindViewHolder(ViewHolder holder, int position)
{
holder.del.setTag(position);
holder.del.setOnClickLintener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
int pos= (int) v.getTag();
//remove view item
notifyItemRemoved(pos);
//remove equivalent arraylist item
listitems.remove(pos);
}
});
}
这不会更新我假设的视图项中的标记值,因为没有为现有项调用onBindViewHolder()
。我如何更新这些值,或者有不同的方法。
答案 0 :(得分:1)
您必须从列表中删除该项,然后您必须致电notifyItemRemoved(pos)
。
@Override
public void onBindViewHolder(ViewHolder holder, int position)
{
holder.del.setTag(position);
holder.del.setOnClickLintener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
int pos = (int) v.getTag();
//remove equivalent arraylist item
listitems.remove(pos);
//remove view item
notifyItemRemoved(pos);
new Handler().postDelayed( new Runnable(){
@override
void run(){
notifyDatasetChanged ()
}
},400);
}
});
}
希望有所帮助:)
答案 1 :(得分:0)
如果要使用notifyItemRemoved并保留要删除的动画,请不要将该位置用作标签。使用项目中的对象作为标签,并在需要索引时找到它。
@Override
public void onBindViewHolder(ViewHolder holder, int position)
{
Object item = listitems.get(position);
holder.del.setTag(item);
holder.del.setOnClickLintener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
Object item = (Object) v.getTag();
int pos = listitems.indexOf(item);
if (pos >= 0) {
//remove equivalent arraylist item
listitems.remove(pos);
//remove view item
notifyItemRemoved(pos);
}
}
});
}