Kivy:使用 ListAdapter 或 DictAdapter 更新到 ListView 数据不会更改按钮文本

Kivy: Update to ListView data with ListAdapter or DictAdapter does not change button text

在容器小部件中,我有一个 ListView 适配器:

list_item_args_converter = \
        lambda row_index, selectable: \
        {'text': "[{}] {}: {}".format(row_index, selectable['t'], selectable['v']),
        'size_hint_y': None, 'height': 25}

my_list_adapter = \
    ListAdapter(data=my_data,
                args_converter=list_item_args_converter,
                selection_mode='single',
                allow_empty_selection=False,
                cls=ListItemButton)

self.list_view = ListView(adapter=my_list_adapter)
self.add_widget(self.list_view)

my_data = [{'t':str(i), 'v':random.randint(1,10)} for i in range(5)]。 我天真地假设 mv.list_view.adapter.data[0]['v'] = '42'(其中 mv 是容器小部件)在列表上调度一个更改事件,从而将第一个列表视图按钮的文本更改为“[0] 0: 42”。

然而什么也没发生。

同样,如果适配器是 DictAdapter 并且它被类似地更改(即,如果 dict 的值本身是 dict,则更改这些 dicts ), 没有任何反应。

仅当项目 appended、inserted、removed、poped、sliced、sorted 等,但如果项目的标识保持不变则不会。在类似问题的情况下,必须手动调度 change 事件。如果 adapterListAdapter,可以这样做:

adapter.data.prop.dispatch(adapter.data.obj())

如果是 DictAdapter,以下是合适的:

adapter.data.prop.dispatch(adapter.data.obj)

(这只花了我一天的时间。希望其他人觉得这很有用……)