如何在移除物品时保持回收器适配器的位置?

时间:2017-08-13 08:07:22

标签: android android-recyclerview recycler-adapter

我有一个回收器适配器,在视图项中有一个删除按钮(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()。我如何更新这些值,或者有不同的方法。

2 个答案:

答案 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);
           }   
        }
    });
}