我试图创建一个通用的RecycleView,并从它那里继承改变视图类,像这样。
<GenericList@RecycleView>:
SelectableRecycleBoxLayout:
canvas.before:
Color:
rgba: (.0, 0.9, .5, .8)
Rectangle:
pos: self.pos
size: self.size
default_size: None, 30
default_size_hint: 1, None
size_hint_y: None
height: self.minimum_height
orientation: 'vertical'
multiselect: False
<SetList@GenericList>:
viewclass: 'SetSelectableLabel'
<CardList@GenericList>:
viewclass: 'CardSelectableLabel'
SetSelectableLabel和CardSelectableLabel之间的区别只是方法被调用的事件on_selected.我注意到,当用这个配置运行一个应用程序时,RecycleView不会显示任何视图类对象。列表是存在的,我可以滚动它,并看到滚动条在移动,但没有任何标签被显示。
但如果我像下面这样在RecycleView中定义viewclass,一切都能正常工作,只是我不能做我想要的事情,即改变继承类上的viewclass以实现自定义行为。
<GenericList@RecycleView>:
viewclass: 'GenericSelectableLabel'
我是不是遗漏了什么?
RecycleView
是一个不完整的widget。有很多事情你不能。比如说
rv = RecycleView()
rv.add_widget(RecycleBoxLayout())
上面的代码不能用 你必须像这样从kv中构造一个widget树。
RecycleView:
RecycleBoxLayout:
viewclass
就是其中之一. 你不能动态地改变它,所以下面的代码。
rv = Bulider.load_string('''
RecycleView:
RecycleBoxLayout:
''')
rv.viewclass = 'Label' # doesn't work
不能用 我不确定这是问题的原因,但你只需要意识到这种不完整性。