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

时间:2016-02-07 02:00:21

标签: python listview kivy listadapter

在容器小部件中,我有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 s,则更改这些dict s),没有任何反应。

1 个答案:

答案 0 :(得分:3)

更改事件仅在项目appendinsertremove d,pop ed,slice d,{{1 }等等,但不是如果项目'身份保持不变。在类似问题的情况下,必须手动调度更改事件。如果sortadapter,则可以这样做:

ListAdapter

如果是adapter.data.prop.dispatch(adapter.data.obj()) ,则以下内容适用:

DictAdapter

(这只是我生命中的一天。希望别人觉得这很有用......)