从外部删除回收器视图



我是Android的新手。我的应用程序是使用回收器视图,而firebase发送触发更新以添加,编辑删除回收器视图中的复选框。

交互器从服务器中获取触发的更新,然后通过主持人在适配器中调用AddItem,UpdateItem或RemoveItem方法。

我可以添加,在回收器视图中详细更新,但是当我尝试从回收器视图中删除该项目时,我很难获得适配器的位置。

通过迭代,我可以找出arraylist的索引,但我不知道如何获得视图的位置来删除它。

RemoveItem方法中的以下代码完全删除所需的视图,但也可以重复(添加)最后一个视图。我需要的是删除整个视图而不添加重复的最后视图。我不知道如何获得getadapterPosition(),因为我没有像OnClick这样的本地触发器。

public class CustomShoppingRecyclerAdapter extends RecyclerView.Adapter<CustomShoppingRecyclerAdapter.ViewHolder> implements ShoppingAdapterView {
private final ArrayList<Shopping> mMessageList = new ArrayList<>();
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.user_item, parent, false);
    vh= new ViewHolder(v);
    return new ViewHolder(v);
}
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
    final Shopping current = mMessageList.get(position);
    holder.mShoppingItemCheckBox.setTag(current.getItem());
    holder.mShoppingItemCheckBox.setText(current.getItem());
    holder.mShoppingItemCheckBox.setChecked(current.getItemStatus());
    holder.mShoppingItemCheckBox.setOnClickListener(null);
    holder.mShoppingItemCheckBox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                    current.setItemStatus(holder.mShoppingItemCheckBox.isChecked());
                    presenter.updateItemToServer(current);
              tag=  (String) holder.mShoppingItemCheckBox.getTag();
            }
        });
}
@Override
public void removeItem(Shopping shopping) {
    Integer index = 0;
    for (Shopping _item : mMessageList) {
        index = mMessageList.indexOf(_item);
        if (_item.getItem().equals(shopping.getItem())) {
                if (index != -1) {
                    mMessageList.remove(index);
                    notifyItemRemoved(index);
                }
        }
    }
}
class ViewHolder extends RecyclerView.ViewHolder {
    private CheckBox mShoppingItemCheckBox;
    private TextView mMessageTextView;
     ViewHolder(View itemView) {
        super(itemView);
itemView.findViewById(R.id.shopping_author);
        mShoppingItemCheckBox = (CheckBox) itemView.findViewById(R.id.shopping_item);
    }

当我使用迭代器时,它解决了我的问题。

    Integer index = 0;
    Iterator<Shopping> it = mMessageList.iterator();
    while (it.hasNext()) {
        if (it.next().getItem().equals(shopping.getItem())) {
            it.remove();
            notifyItemRemoved(index);
            notifyItemRangeChanged(index, mMessageList.size());
            // If you know it's unique, you could `break;` here
        }
        index=index+1;
    }

感谢Tomasz Czura的答案。

最新更新