在容器小部件中,我有一个带有适配器的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
,则更改这些{
只有在项是
append
ed、insert
ed、remove
d、pop
ed、slice
d、sort
ed等情况下才会触发更改事件,但如果项目的标识保持不变,则不会触发更改事件。在类似问题的情况下,必须手动调度更改事件。如果adapter
是ListAdapter
,可以这样做:在
^{pr2}$DictAdapter
的情况下,以下是适当的:)这让我损失了一天的生命。希望其他人发现这个有用…)
相关问题 更多 >
编程相关推荐