如何删除已删除的空 space 小部件?

How to remove empty space of widget removed?

我有一个代码可以正常工作,但有一个问题。用户单击图标 'delete' 后,小部件正在删除,并且在该小部件之后是空的 space。 如何删除空 space?我真的无法理解如何修复它。

from kivy.lang import Builder
from kivymd.app import MDApp
from kivymd.uix.list import OneLineIconListItem
from kivy.properties import StringProperty

KV = '''
<RVItem>
    IconLeftWidget:
        icon: 'delete'
        del_id: root.del_id
        on_release: app.delete(self)

Screen:
    rv: rv
    RecycleView:
        id: rv
        viewclass: 'RVItem'
        do_scroll_x: False
        RecycleBoxLayout:
            orientation: 'vertical'
            size_hint_y: None
            size: self.minimum_size
            default_size: None, dp(56)
            default_size_hint: 1, None

'''

class RVItem(OneLineIconListItem):
    del_id = StringProperty()

class MainApp(MDApp):
    def build(self):
        return Builder.load_string(KV)

    def on_start(self):
        self.root.rv.data = [{'text': str(x), 'del_id': str(x)} for x in range(10)]
    
    def delete(self, instance):
        for item in self.root.children[0].children[0].children:
            if item.text == instance.del_id:
                self.root.children[0].children[0].remove_widget(item)

MainApp().run()

RecycleView 是基于它的 data,因此删除它的一个子窗口小部件实际上除了那个窗口小部件暂时消失之外没有任何影响(它会在您滚动时重新出现)。要真正从 RecycleView 中删除一个项目,您必须从 data 中删除它 尝试修改您的 delete() 方法来执行此操作:

def delete(self, instance):
    for item in self.root.rv.data:
        if item['del_id'] == instance.del_id:
            self.root.rv.data.remove(item)
            return