当前位置: 首页 > 知识库问答 >
问题:

删除后,回收视图中仍存在项目

寇甫
2023-03-14

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

@重写公共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;
}

}

这是我删除项目后的删除方法,它仍然存在于我的回收视图中,并在firebase中消失

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

有人帮忙吗?

共有1个答案

董畅
2023-03-14

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

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

因此,您应该在适配器中有一个删除方法。

更新

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

 private void remove(int position) {
    itemList.remove(position);
    notifyItemRemoved(position);
}
 类似资料:
  • 我以以下方式使用来显示在SQLite DB中更新的位置项列表。 这些项目被很好地删除,并在我滑动它们时更新。但是当我滑动删除最后一个项目时,它又出现在视图中。当我关闭应用程序并重新打开应用程序时,该项目已被删除。 但当项目被滑动以删除时,在该应用程序运行的实例中,即使滑动多次,该项目也不会从视图中删除。 refreshPlacesData() 我错过了什么吗?谢谢。 编辑:我尝试更新适配器而不是m

  • 问题内容: 我在Python中有一个比较大的字典,希望不仅能够从其中删除项目,而且实际上可以从程序中的这些删除中 回收 内存。我遇到了一个问题,尽管我从字典中删除了项目,甚至手动运行了垃圾收集器,但Python似乎并没有释放内存本身。 一个简单的例子: 我想象发生了什么事,尽管删除了条目并运行了垃圾回收器,但是Python并没有继续调整字典的大小。我的问题是,是否有任何简单的方法可以解决此问题,或

  • 在从recycler视图中移除项目后,我必须获取recyclerview的数据集大小 我正在从适配器中删除项目 代码片段

  • 我正在使用回收器视图显示具有多个视图的项目。每当我启动应用程序时,就会显示一些空白。正好等于我的列表项。我提供了截图,请浏览一下。 我想我的代码没有问题。下面是我的代码RecycerView 适配器代码 请帮帮我。谢谢。

  • 如何在swapCursor函数中实现回收器视图默认项添加/删除动画。notifyDataSetChanged()不会显示任何动画。

  • 我正在尝试删除空列项目装饰,如下图所示。我最初想在注释中使用下面的代码根据内容限制最后一行的跨距计数,但我没有成功。 以下是代码和图像的结果。 当我取消注释代码并运行应用程序时,结果如下: 任何代码参考或链接都会有所帮助。提前感谢。