RecycleView 视图

在 1.10.0 版本加入.

RecycleView的适配器部分,它与布局共同构成了模型-视图-控制器模式中的视图部分。

view模块负责使用adapter类将数据转换为视图,然后由布局显示。视图可以是任何基于Widget的类。然而,继承自RecycleDataViewBehavior会添加用于将数据转换为视图的方法。

待办事项:
  • 使视图缓存特定于每个视图类类型。

class kivy.uix.recycleview.views.RecycleDataAdapter(**kwargs)[源代码]

基类:EventDispatcher

将数据转换为视图的类。

--- 内部细节 --- 视图可以有3种状态。

  • 视图显示时,它可以与数据完全同步。这些视图存储在 views 中。

  • 视图可能是“脏”的,这种情况发生在视图与数据同步,但大小/位置参数由布局控制时。这发生在视图当前未显示但数据未改变的情况下。这些视图存储在 dirty_views 中。

  • 最后,视图可能处于“死亡”状态,这种情况发生在数据变更且视图未更新时,或者视图刚被创建时。这类视图通常会被添加到内部缓存中。

通常情况下,布局管理器会先布局数据,然后通过 set_visible_views() 方法请求显示某些特定数据项的视图。

这些视图取自当前视图、脏缓存或全局缓存。随后,根据视图状态调用 refresh_view_attrs() 以将视图与数据同步更新(尺寸参数除外)。最后,布局管理器获取这些视图,更新其大小并显示它们。

attach_recycleview(rv)[源代码]

RecycleViewBehavior 与此实例关联。它存储在 recycleview 中。

create_view(index, data_item, viewclass)[源代码]

(内部)为 index 处的数据创建并初始化视图。

返回的视图与数据同步,但位置/大小信息除外。

detach_recycleview()[源代码]

移除与该实例关联的 RecycleViewBehavior,并清空 recycleview

get_view(index, data_item, viewclass)[源代码]

(内部)返回 index 处数据的视图实例。

它会遍历各种缓存,并在不存在时最终创建一个视图。返回的视图与数据同步,但位置/大小信息除外。

如果在缓存中找到,则会在返回前从源中移除。它不会检查当前视图。

get_visible_view(index)[源代码]

返回与``index``关联的当前可见视图。

如果当前没有为 index 显示任何视图,则返回 None

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()。更多细节请参阅该方法。

备注

与数据同步时,将跳过任何尺寸和位置信息。

set_visible_views(indices, data, viewclasses)[源代码]

获取当前视口的新视图、剩余视图和旧视图的三元组。

新视图已与数据同步,但大小/位置属性除外。旧视图需从布局中移除,并添加新视图。

新视图不一定是*全新的*,而是指当前所有可见的视图。

class kivy.uix.recycleview.views.RecycleDataViewBehavior[源代码]

基类:object

数据视图(RecycleView.viewclass)的可选基类。如果视图继承自该类,则在数据变更或布局更新需要更新视图时,将调用该类的函数。

refresh_view_attrs(rv, index, data)[源代码]

当视图首次使用该项目的`data`字典中的值填充时,由:class:`RecycleAdapter`调用。

任何位置或尺寸信息都应移除,因为它们随后会通过 refresh_view_layout 进行设置。

参数:
rvRecycleView 实例

引发更新的 RecycleView

data:字典

用于填充此视图的数据字典。

refresh_view_layout(rv, index, layout, viewport)[源代码]

当视图的大小由布局管理器 RecycleLayoutManagerBehavior 更新时调用。

参数:
rvRecycleView 实例

引发更新的 RecycleView

viewport:4元组

布局管理器坐标中左下角的坐标以及宽度和高度。这可能大于此视图项。

抛出异常:

LayoutChangeException:如果在调用此方法期间尺寸或数据发生变化,抛出`LayoutChangeException`异常将强制刷新。当数据已更改且我们不想继续布局时,此功能很有用,因为布局很快会被再次覆盖。

class kivy.uix.recycleview.views.RecycleKVIDsDataViewBehavior[源代码]

基类:RecycleDataViewBehavior

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 版本加入.

refresh_view_attrs(rv, index, data)[源代码]

当视图首次使用该项目的`data`字典中的值填充时,由:class:`RecycleAdapter`调用。

任何位置或尺寸信息都应移除,因为它们随后会通过 refresh_view_layout 进行设置。

参数:
rvRecycleView 实例

引发更新的 RecycleView

data:字典

用于填充此视图的数据字典。