首页 文章

删除项目后仍存在于循环视图中

提问于
浏览
2

这是否意味着我没有刷新我的适配器或什么?

@Override public void onDeleteClick(int position){FoodInfo selectedItem;

if(!searchView.getQuery().toString().isEmpty())
    {
        selectedItem = newlist.get(position);
    }
    else
    {
        selectedItem = mfoodinfo.get(position);
    }

    final String selectedKey = selectedItem.getFoodname();

    StorageReference imageRef = firebaseStorage.getReferenceFromUrl(selectedItem.getImageUrl());
    imageRef.delete().addOnSuccessListener(new OnSuccessListener<Void>() {
        @Override
        public void onSuccess(Void aVoid) {
            databaseReference.child(selectedKey).removeValue();
            foodAdapter.notifyDataSetChanged();
            Toast.makeText(Recycleview.this, "Item deleted", Toast.LENGTH_SHORT).show();

        }
    });

}

食物适配器

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

public void setFilter(List<FoodInfo> newlist) {

    mfoodinfo = new ArrayList<>();
    mfoodinfo.addAll(newlist);
    notifyDataSetChanged();
}

     @Override
    public void onClick(View v) {
        if (mListener != null) {
            int position = getAdapterPosition();
            if (position != RecyclerView.NO_POSITION) {
                mListener.onItemClick(position);
            }
        }
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        menu.setHeaderTitle("Select Action");
        MenuItem delete = menu.add(Menu.NONE, 1, 1, "Delete");
        MenuItem update = menu.add(Menu.NONE, 2, 2, "Update ");


        update.setOnMenuItemClickListener(this);
        delete.setOnMenuItemClickListener(this);
    }
    @Override
    public boolean onMenuItemClick(MenuItem item) {
        if (mListener != null) {
            int position = getAdapterPosition();
            if (position != RecyclerView.NO_POSITION) {

                switch (item.getItemId()) {

                    case 1:
                        mListener.onDeleteClick(position);
                        return true;
                    case 2:
                        mListener.UpdateFood(position);
                        return true;

                }
            }
        }
        return false;
    }

}

public interface OnItemClickListener {
    void onItemClick(int position);

    void onDeleteClick(int position);

    void UpdateFood(int position);


}

public void setOnItemClickListener(OnItemClickListener listener) {
    mListener = listener;
}

}

这是我的删除方法,我删除它仍然存在于我的回收视图bt在firebase中

我必须离开此页面并再次访问,然后它只显示与firebase完全相同的项目

有人帮吗?

1 回答

  • 1

    您只是从数据库中删除它,而不是从适配器中删除它 .

    databaseReference.child(selectedKey).removeValue();
    foodAdapter.remove(item); // this is what you need 
    foodAdapter.notifyDataSetChanged();
    

    所以你应该在适配器中有一个remove方法 .

    UPDATE

    这是适配器上需要的remove方法:

    private void remove(int position) {
        itemList.remove(position);
        notifyItemRemoved(position);
    }
    

相关问题