我已升级到Kivy 1.10,因此我认为我应该将所有ListViews更改为RecycleViews。但是,我注意到处理选择比以前稍微困难一些。首先,我尝试使用SelectableLabel
中的SelectableRecycleBoxLayout
和kivy/uix/recycleview/__init__.py
复制我所拥有的内容。但是,我注意到选择的一个奇怪的行为。我有2个RecycleView listview1
和listview2
,如下所示。
RecycleView:
id: listview1
size_hint: 5./16, 25*8./600
pos: 398-self.width, 600*0.49
viewclass: 'SelectableLabel'
canvas.before:
Color:
rgba: 1, 1, 1, 1
Rectangle:
size: self.size
pos: self.pos
SelectableRecycleBoxLayout:
color: [0, 0, 0, 1]
colourS: (0.76,0.87,1,1)
colourU: (1, 1, 1, 1)
default_size: None, 25#dp(56)
default_size_hint: 1, None
size_hint_y: None
height: self.minimum_height
orientation: 'vertical'
RecycleView:
id: listview2
size_hint: 5./16, 25*8./600
pos: 402, 600*0.49
viewclass: 'SelectableLabel'
canvas.before:
Color:
rgba: 1, 1, 1, 1
Rectangle:
size: self.size
pos: self.pos
SelectableRecycleBoxLayout:
color: [0, 0, 0, 1]
colourS: (0.76,0.87,1,1)
colourU: (1, 1, 1, 1)
default_size: None, 25#dp(56)
default_size_hint: 1, None
size_hint_y: None
height: self.minimum_height
orientation: 'vertical'
此外,我向mySelection
添加了RecycleView
变量,这样我就不必循环获取所选项目的数据,并对SelectableLabel.apply_selection
进行了编辑以方便此
def apply_selection(self, rv, index, is_selected):
''' Respond to the selection of items in the view. '''
self.selected = is_selected
if is_selected:
rv.mySelection.append(rv.data[index])
else:
if rv.data[index] in rv.mySelection:
rv.mySelection.remove(rv.data[index])
尽管listview1
和listview2
具有不同的data
变量,但listview1
中的项目选择listview2
也会被SelectableLabel
选中。我猜这是因为他们的viewclass
都有RecycleView
。这是否意味着每个viewclass
都需要它自己的不同INSERT INTO EMPLOYEE
来确保不会发生这种交叉?
此外,我注意到在Scrollview中滚动在Kivy 1.10中比在1.9中更加严格。例如,快速滑动可以从Scrollview的顶部到达底部,但现在相同的滑动可能会将Scrollview向下移动大约5行文本。我想知道我需要改变什么才能从Kivy 1.9恢复行为。