目录
- RecycleView 视图
RecycleDataAdapterRecycleDataAdapter.attach_recycleview()RecycleDataAdapter.create_view()RecycleDataAdapter.detach_recycleview()RecycleDataAdapter.get_view()RecycleDataAdapter.get_visible_view()RecycleDataAdapter.invalidate()RecycleDataAdapter.make_view_dirty()RecycleDataAdapter.make_views_dirty()RecycleDataAdapter.recycleviewRecycleDataAdapter.refresh_view_attrs()RecycleDataAdapter.refresh_view_layout()RecycleDataAdapter.set_visible_views()
RecycleDataViewBehaviorRecycleKVIDsDataViewBehavior
RecycleView 视图¶
在 1.10.0 版本加入.
RecycleView的适配器部分,它与布局共同构成了模型-视图-控制器模式中的视图部分。
view模块负责使用adapter类将数据转换为视图,然后由布局显示。视图可以是任何基于Widget的类。然而,继承自RecycleDataViewBehavior会添加用于将数据转换为视图的方法。
- 待办事项:
使视图缓存特定于每个视图类类型。
- class kivy.uix.recycleview.views.RecycleDataAdapter(**kwargs)[源代码]¶
-
将数据转换为视图的类。
--- 内部细节 --- 视图可以有3种状态。
视图显示时,它可以与数据完全同步。这些视图存储在
views中。视图可能是“脏”的,这种情况发生在视图与数据同步,但大小/位置参数由布局控制时。这发生在视图当前未显示但数据未改变的情况下。这些视图存储在
dirty_views中。最后,视图可能处于“死亡”状态,这种情况发生在数据变更且视图未更新时,或者视图刚被创建时。这类视图通常会被添加到内部缓存中。
通常情况下,布局管理器会先布局数据,然后通过
set_visible_views()方法请求显示某些特定数据项的视图。这些视图取自当前视图、脏缓存或全局缓存。随后,根据视图状态调用
refresh_view_attrs()以将视图与数据同步更新(尺寸参数除外)。最后,布局管理器获取这些视图,更新其大小并显示它们。- attach_recycleview(rv)[源代码]¶
将
RecycleViewBehavior与此实例关联。它存储在recycleview中。
- detach_recycleview()[源代码]¶
移除与该实例关联的
RecycleViewBehavior,并清空recycleview。
- get_view(index, data_item, viewclass)[源代码]¶
(内部)返回 index 处数据的视图实例。
它会遍历各种缓存,并在不存在时最终创建一个视图。返回的视图与数据同步,但位置/大小信息除外。
如果在缓存中找到,则会在返回前从源中移除。它不会检查当前视图。
- invalidate()[源代码]¶
将所有当前视图移入全局缓存。
与将视图标记为脏(此时视图与数据同步,仅尺寸信息除外)不同,此操作将完全断开视图与数据的连接,因为假定数据已与视图失去同步。
通常在数据发生变化时调用此方法。
- make_view_dirty(view, index)[源代码]¶
(内部)用于将此视图标记为脏状态,以便供其他部分使用。参见
make_views_dirty()。
- make_views_dirty()[源代码]¶
将所有当前视图标记为脏。
脏视图仍与对应数据保持同步。然而,尺寸信息可能会失去同步。因此,脏视图可以通过仅更新尺寸信息,由同一索引复用。
一旦该索引的底层数据发生变化,应通过
invalidate()将该视图从脏视图列表中移除,并移至全局缓存中。当布局管理器需要重新布局所有数据时,通常会调用此方法。
- recycleview¶
与此实例关联的
RecycleViewBehavior。
- refresh_view_attrs(index, data_item, view)[源代码]¶
(内部)同步视图,使其与数据保持最新状态。
如果视图继承自
RecycleDataViewBehavior,此方法将调用RecycleDataViewBehavior.refresh_view_attrs()。更多细节请参阅该方法。备注
与数据同步时,将跳过任何尺寸和位置信息。
- refresh_view_layout(index, layout, view, viewport)[源代码]¶
更新视图的尺寸信息。
视口位于布局管理器的坐标系中。
如果视图继承自
RecycleDataViewBehavior,此方法将调用RecycleDataViewBehavior.refresh_view_attrs()。更多细节请参阅该方法。备注
与数据同步时,将跳过任何尺寸和位置信息。
- class kivy.uix.recycleview.views.RecycleDataViewBehavior[源代码]¶
基类:
object数据视图(
RecycleView.viewclass)的可选基类。如果视图继承自该类,则在数据变更或布局更新需要更新视图时,将调用该类的函数。- refresh_view_attrs(rv, index, data)[源代码]¶
当视图首次使用该项目的`data`字典中的值填充时,由:class:`RecycleAdapter`调用。
任何位置或尺寸信息都应移除,因为它们随后会通过
refresh_view_layout进行设置。- 参数:
- rv:
RecycleView实例 引发更新的
RecycleView。- data:字典
用于填充此视图的数据字典。
- rv:
- refresh_view_layout(rv, index, layout, viewport)[源代码]¶
当视图的大小由布局管理器
RecycleLayoutManagerBehavior更新时调用。- 参数:
- rv:
RecycleView实例 引发更新的
RecycleView。- viewport:4元组
布局管理器坐标中左下角的坐标以及宽度和高度。这可能大于此视图项。
- rv:
- 抛出异常:
LayoutChangeException:如果在调用此方法期间尺寸或数据发生变化,抛出`LayoutChangeException`异常将强制刷新。当数据已更改且我们不想继续布局时,此功能很有用,因为布局很快会被再次覆盖。
- class kivy.uix.recycleview.views.RecycleKVIDsDataViewBehavior[源代码]¶
-
与
RecycleDataViewBehavior类似,不同之处在于数据键可以表示根 KV 规则中带有 id 的对象属性。例如,给定一个KV规则:
<MyRule@RecycleKVIDsDataViewBehavior+BoxLayout>: Label: id: name Label: id: value
然后,通过设置数据列表
rv.data = [{'name.text': 'Kivy user', 'value.text': '12'}],将自动设置相应的标签。因此,如果键中没有句点,根部件的命名属性将被设置为相应的值。如果存在句点,则句点前所列id的部件的命名属性将被设置为相应的值。
在 2.0.0 版本加入.