在容器小部件中,我有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),没有任何反应。
答案 0 :(得分:3)
更改事件仅在项目append
,insert
,remove
d,pop
ed,slice
d,{{1 }等等,但不是如果项目'身份保持不变。在类似问题的情况下,必须手动调度更改事件。如果sort
是adapter
,则可以这样做:
ListAdapter
如果是adapter.data.prop.dispatch(adapter.data.obj())
,则以下内容适用:
DictAdapter
(这只是我生命中的一天。希望别人觉得这很有用......)