CN116974562A - 基于数据绑定技术的列表视图组件封装方法、装置及介质 - Google Patents
基于数据绑定技术的列表视图组件封装方法、装置及介质 Download PDFInfo
- Publication number
- CN116974562A CN116974562A CN202310962223.5A CN202310962223A CN116974562A CN 116974562 A CN116974562 A CN 116974562A CN 202310962223 A CN202310962223 A CN 202310962223A CN 116974562 A CN116974562 A CN 116974562A
- Authority
- CN
- China
- Prior art keywords
- data
- binding
- list
- class
- list item
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 230000027455 binding Effects 0.000 title claims abstract description 189
- 238000009739 binding Methods 0.000 title claims abstract description 189
- 238000000034 method Methods 0.000 title claims abstract description 152
- 238000005516 engineering process Methods 0.000 title claims abstract description 18
- 238000004806 packaging method and process Methods 0.000 title claims abstract description 9
- 230000008859 change Effects 0.000 claims abstract description 42
- 238000012545 processing Methods 0.000 claims abstract description 33
- 238000004590 computer program Methods 0.000 claims description 20
- 238000012544 monitoring process Methods 0.000 claims description 10
- 238000005538 encapsulation Methods 0.000 claims description 3
- 238000011161 development Methods 0.000 abstract description 19
- 230000008569 process Effects 0.000 description 14
- 230000006870 function Effects 0.000 description 11
- 239000000243 solution Substances 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 101150084935 PTER gene Proteins 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000002457 bidirectional effect Effects 0.000 description 1
- 239000012141 concentrate Substances 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000002347 injection Methods 0.000 description 1
- 239000007924 injection Substances 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/38—Creation or generation of source code for implementing user interfaces
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4434—Reducing the memory space required by the program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/451—Execution arrangements for user interfaces
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Stored Programmes (AREA)
Abstract
本申请提供一种基于数据绑定技术的列表视图组件封装方法、装置及介质。该方法包括:创建绑定视图持有者类,设置列表项数据与列表项布局之间的关联方法,并将列表项内部事件处理对象与列表项布局的处理器变量进行绑定;根据布局文件中使用的变量,利用数据绑定库自动生成变量值;创建基础绑定适配器类,在基础绑定适配器类中定义数据变量,并重写数据设置方法;如果设置的数据类型为可观察列表,则为基础绑定适配器类添加回调观察者列表变化监听器,在每个数据变化的回调中调用基础绑定适配器类的对应刷新数据的方法,以便根据页面数据的变化自动刷新页面。本申请实现快速开发列表功能,减少重复的样板代码,提高开发效率和代码的可维护性。
Description
技术领域
本申请涉及应用程序开发技术领域,尤其涉及一种基于数据绑定技术的列表视图组件封装方法、装置及介质。
背景技术
在Android应用开发中,列表组件是一个常用的用户界面(UI)组件,几乎在大部分应用界面开发中都会使用到。RecyclerView是开发者们广泛使用的列表组件,它可以实现高效地展示大量的滚动列表数据。然而,RecyclerView的常规开发流程需要开发者手动创建对应的适配器(Adapter)和视图持有者(ViewHolder)代码。这些代码是为了定义如何将数据与列表中的每一项(即列表项)进行绑定,以及如何回收和重用已经滚动出屏幕的列表项。
在这个过程中,开发者需要为每一个RecyclerView分别编写一套Adapter和ViewHolder的代码。这就导致了大量的代码重复,因为许多RecyclerView的实现在本质上是相似的,只是数据类型和列表项的布局有所不同。这种重复编写的样板代码不仅降低了开发效率,也使得代码的维护和修改变得更加困难。虽然使用AndroidDatabinding技术可以简化部分数据与视图的绑定过程,但是开发者仍需要为每个RecyclerView手动创建Adapter和ViewHolder,这仍然是一个繁琐的过程。
发明内容
有鉴于此,本申请实施例提供了一种基于数据绑定技术的列表视图组件封装方法、装置及介质,以解决现有技术存在的无法快速开发列表功能,重复编写样板代码降低开发效率和代码可维护性的问题。
本申请实施例的第一方面,提供了一种基于数据绑定技术的列表视图组件封装方法,包括:创建绑定视图持有者类,绑定视图持有者类继承自列表视图持有者,其中,绑定视图持有者类包含列表项的数据类型以及为列表项布局生成的视图数据绑定类;在绑定视图持有者类中设置列表项数据与列表项布局之间的关联方法,并设置列表项内部事件处理对象,将列表项内部事件处理对象与列表项布局的处理器变量进行绑定;根据布局文件中使用的变量,利用数据绑定库自动生成变量对应的变量值;创建基础绑定适配器类,在基础绑定适配器类中定义数据变量,并对基础绑定适配器类的数据设置方法进行重写,其中,数据变量用于接收列表的数据源;如果设置的数据类型为可观察列表,则为基础绑定适配器类添加用于监听数据变化的回调观察者列表变化监听器,在每个数据变化的回调中调用基础绑定适配器类的对应刷新数据的方法,以便根据页面数据的变化自动刷新页面。
本申请实施例的第二方面,提供了一种基于数据绑定技术的列表视图组件封装装置,包括:创建模块,被配置为创建绑定视图持有者类,绑定视图持有者类继承自列表视图持有者,其中,绑定视图持有者类包含列表项的数据类型以及为列表项布局生成的视图数据绑定类;设置模块,被配置为在绑定视图持有者类中设置列表项数据与列表项布局之间的关联方法,并设置列表项内部事件处理对象,将列表项内部事件处理对象与列表项布局的处理器变量进行绑定;生成模块,被配置为根据布局文件中使用的变量,利用数据绑定库自动生成变量对应的变量值;定义模块,被配置为创建基础绑定适配器类,在基础绑定适配器类中定义数据变量,并对基础绑定适配器类的数据设置方法进行重写,其中,数据变量用于接收列表的数据源;监听模块,被配置为如果设置的数据类型为可观察列表,则为基础绑定适配器类添加用于监听数据变化的回调观察者列表变化监听器,在每个数据变化的回调中调用基础绑定适配器类的对应刷新数据的方法,以便根据页面数据的变化自动刷新页面。
本申请实施例的第三方面,提供了一种电子设备,包括存储器,处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述方法的步骤。
本申请实施例的第四方面,提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序被处理器执行时实现上述方法的步骤。
本申请实施例采用的上述至少一个技术方案能够达到以下有益效果:
通过创建绑定视图持有者类,绑定视图持有者类继承自列表视图持有者,其中,绑定视图持有者类包含列表项的数据类型以及为列表项布局生成的视图数据绑定类;在绑定视图持有者类中设置列表项数据与列表项布局之间的关联方法,并设置列表项内部事件处理对象,将列表项内部事件处理对象与列表项布局的处理器变量进行绑定;根据布局文件中使用的变量,利用数据绑定库自动生成变量对应的变量值;创建基础绑定适配器类,在基础绑定适配器类中定义数据变量,并对基础绑定适配器类的数据设置方法进行重写,其中,数据变量用于接收列表的数据源;如果设置的数据类型为可观察列表,则为基础绑定适配器类添加用于监听数据变化的回调观察者列表变化监听器,在每个数据变化的回调中调用基础绑定适配器类的对应刷新数据的方法,以便根据页面数据的变化自动刷新页面。本申请实现快速开发列表功能,减少重复的样板代码,提高开发效率和代码的可维护性。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1是本申请实施例提供的基于数据绑定技术的列表视图组件封装方法的流程示意图;
图2是本申请实施例提供的基于数据绑定技术的列表视图组件封装装置的结构示意图;
图3是本申请实施例提供的电子设备的结构示意图。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本申请实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本申请。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本申请的描述。
为解决背景技术中所描述的问题,本申请实施例提供了一种使用AndroidDatabinding技术实现快速开发列表功能框架的实现方法。本方案中,通过封装通用的适配器(Adapter)和视图持有者(ViewHolder),使开发者不再需要为每个列表视图组件单独创建这两个组件,从而大大减少了重复的样板代码,提高了代码的可维护性和可读性。本方案的核心技术手段在于,利用Android数据绑定技术实现双向绑定,即数据和视图之间的自动同步。这样,当数据源中的数据发生变化时,视图会自动更新;反过来,当用户在视图上进行操作(比如输入文本、点击按钮等)时,数据源也会自动更新。这极大地简化了数据和视图之间的交互流程,使得开发者可以更专注于业务逻辑的实现,而不是繁琐的视图更新操作。此外,本方案还采用@BindingAdapter注解进行方法参数注入,使得开发者可以在布局文件中直接配置数据源、布局和相关事件等数据,进一步简化了开发流程。
下面结合附图以及具体实施例对本申请技术方案的内容进行详细描述。
图1是本申请实施例提供的基于数据绑定技术的列表视图组件封装方法的流程示意图。图1的基于数据绑定技术的列表视图组件封装方法可以由应用程序来执行。如图1所示,该基于数据绑定技术的列表视图组件封装方法具体可以包括:
S101,创建绑定视图持有者类,绑定视图持有者类继承自列表视图持有者,其中,绑定视图持有者类包含列表项的数据类型以及为列表项布局生成的视图数据绑定类;
S102,在绑定视图持有者类中设置列表项数据与列表项布局之间的关联方法,并设置列表项内部事件处理对象,将列表项内部事件处理对象与列表项布局的处理器变量进行绑定;
S103,根据布局文件中使用的变量,利用数据绑定库自动生成变量对应的变量值;
S104,创建基础绑定适配器类,在基础绑定适配器类中定义数据变量,并对基础绑定适配器类的数据设置方法进行重写,其中,数据变量用于接收列表的数据源;
S105,如果设置的数据类型为可观察列表,则为基础绑定适配器类添加用于监听数据变化的回调观察者列表变化监听器,在每个数据变化的回调中调用基础绑定适配器类的对应刷新数据的方法,以便根据页面数据的变化自动刷新页面。
首先对本申请实施例在实际应用场景中涉及的一些技术术语进行解释,具体可以包括以下内容:
Databinding:它是Android中的一个库,可以用来在应用的UI组件和数据之间进行双向绑定,当页面数据发生变化时,UI会自动更新,反之亦然。
RecyclerView:它是Android中用于实现列表和网格等滚动布局的一个强大的组件。它需要一个Adapter来填充数据,并需要ViewHolder来承载每个列表项的视图。
Adapter:Adapter是RecyclerView的一部分,用于处理每个列表项(item)布局的创建和ViewHolder的绑定。
ViewHolder:ViewHolder是一个用于存储列表项视图信息的容器,以便RecyclerView可以快速回收和重用已经滚动出屏幕的视图。
xml:xml是一种标记语言,用于定义数据的结构和内容。在Android中,xml文件通常用于定义应用的布局和用户界面。
首先,在对本申请实施例进行详细描述之前,对本申请使用Android DataBinding技术实现RecyclerView封装的过程及原理进行概括性描述,具体可以包括以下步骤:
(1)创建一个BindingViewHolder类(即绑定视图持有者类),该类继承自RecyclerView.ViewHolder(即列表视图持有者)。该类有两个泛型,T为it em的数据类型,BINDING为item布局生成的ViewDataBinding类(及视图数据绑定类)。传入的参数binding即为BINDING类型,然后通过binding.root获取布局的实际View将其传给RecyclerView.ViewHolder。
(2)BindingViewHolder类对外提供两个方法,即bind和setItemEventHa ndler方法。Bind方法用于绑定数据,即将item的数据和布局绑定起来(即将列表项的数据与布局关联);setItemEventHandler方法用于设置item内部事件处理的对象,将列表项内部事件处理对象绑定到列表项布局的handler变量(即列表项布局的处理器变量)。
(3)DataBinding(即数据绑定库)根据xml布局(即布局文件)中使用的变量自动生成对应的变量对应的变量值BR.xxx。
(4)为了便于扩展先创建一个抽象的BaseBindingAdapter(即基础绑定适配器类),BaseBindingAdapter与BindingViewHolder一样具有两个泛型,Ada pter的ViewHolder泛型类型就是上述实施例创建的BindingViewHolder(绑定视图持有者类)。
(5)因为需要向Adapter中设置数据,所以需要定义一个data变量用于接收列表的数据源,并重写其set方法。换言之,在基础绑定适配器类中定义一个数据变量,该数据变量用于接收列表的数据源,并且还重写了基础绑定适配器类的数据设置方法。
进一步地,如果设置的数据类型是ObservableList(即可观察列表),则为其添加数据改变的回调ObserverListChangeListener(即回调观察者列表变化监听器),回调类中定义onChanged()、onItemRangeRemoved()、onItemRangeCh anged()等刷新数据方法,回调的构造参数传入RecyclerView.Adapter,在每个数据变化的回调中调用Adapter的对应刷新数据的方法,实现根据页面数据变化自动刷新界面。
在一些实施例中,该方法还包括:在布局文件中定义一个用于接收列表项布局的资源标识符,并定义一个列表项视图类型创造者,其中,列表项视图类型创造者用于接收具有多种列表项布局类型时的布局数据。
具体地,需要创建一个布局XML文件,这个文件定义了列表项(item)的布局。在这个文件中,本申请实施例定义了一个名为layoutRes的变量,用于接收列表项布局的资源标识符(即资源id)。此外,还定义了一个名为itemView TypeCreator的变量,这个变量是一个列表项视图类型创造者,用于处理存在多种列表项布局类型时的布局数据。
对于itemViewTypeCreator,本申请实施例可以为其设定一个方法getItemViewType,这个方法用于处理不同的列表项布局类型。具体来说,当本申请实施例需要根据数据类型或数据内容来动态改变列表项的布局时,就可以调用这个方法。如果itemViewTypeCreator不为空,那么就调用getItemViewType方法返回相应的布局类型。如果itemViewTypeCreator为空,那么本申请实施例就调用默认的布局类型,这通常是在所有列表项的布局都相同时的情况。
进一步地,本申请实施例需要创建一个名为绑定视图持有者的类,该类继承自列表视图持有者。这个类包含两个泛型,一个是列表项的数据类型,另一个是列表项布局生成的视图数据绑定类。在这个类中,本申请实施例定义了两个方法:bind和setItemEventHandler。bind方法用于将列表项的数据和布局绑定在一起,setItemEventHandler方法用于设置列表项内部事件处理的对象,将其绑定到布局的处理器变量上。
此外,本申请实施例还需要创建一个抽象的基础绑定适配器类,它和绑定视图持有者一样包含两个泛型,适配器的视图持有者泛型类型就是上面创建的绑定视图持有者类。在这个类中,本申请实施例定义了一个名为data的变量,用于接收列表的数据源。
在一些实施例中,该方法还包括:实现创建绑定视图持有者类的方法时,判断列表项视图的条目是否创建,当列表项视图的条目已创建时,调用列表项布局获取方法来得到布局标识符,当列表项视图的条目未创建时,直接使用资源标识符;在获取到列表项布局的资源标识符后,利用数据绑定工具类的填充方法创建列表项布局的视图数据绑定,并通过视图数据绑定绑定视图持有者类并返回。
具体地,本申请实施例还需要实现一个名为onCreateViewHolder的方法,这个方法用于创建绑定视图持有者类。在这个方法中,本申请实施例需要首先判断列表项视图类型创造者(itemViewTypeCreator)是否为空,这个判断相当于在检查列表项视图的条目是否已经创建。
如果itemViewTypeCreator不为空,那么本申请实施例就调用getItemLayo ut方法获取列表项布局的资源标识符。这个方法可以根据列表项的类型或内容动态地返回不同的布局资源标识符。如果itemViewTypeCreator为空,那么本申请实施例就直接使用预定义的资源标识符(layoutRes),这通常是在所有列表项的布局都相同的情况下使用。
进一步地,在获取到列表项布局的资源标识符后,本申请实施例就可以使用数据绑定工具类的填充方法(DataBindingUtil.inflate)来创建列表项布局的视图数据绑定(ViewDataBinding)。这个视图数据绑定包含了所有的布局组件和绑定的数据,本申请实施例可以通过这个视图数据绑定来访问和操作列表项的布局。最后,本申请实施例通过视图数据绑定创建绑定视图持有者类,并返回这个类的实例。这个绑定视图持有者类实例就可以用于在列表视图中显示一个列表项。
根据上述实施例提供的方法,通过这种方式,本申请实施例可以更灵活地处理不同类型的列表项,同时也简化了列表项的创建和数据绑定的流程,提高了开发效率。
在一些实施例中,在绑定视图持有者类中设置列表项数据与列表项布局之间的关联方法,并设置列表项内部事件处理对象,包括:利用绑定视图持有者类的方法进行数据绑定时,调用绑定视图持有者类的绑定数据方法,以便将列表项数据与列表项布局进行关联;调用绑定视图持有者类的列表项内部事件处理对象设置方法,以设置列表项内部事件处理对象。
具体地,本申请实施例还需要实现onCreateViewHolder方法创建绑定视图持有者类。在创建完成后,本申请实施例调用名为bindClick的方法,这个方法用于绑定列表项的点击事件。具体来说,本申请实施例首先通过视图数据绑定的根元素(binding.root)获取列表项的视图对象,然后对这个视图对象设置点击事件。在事件处理中,本申请实施例调用名为onItemClick的方法,这个方法就是在布局文件中传入的列表项点击事件处理器。
进一步地,本申请实施例需要实现onBindViewHolder方法进行数据绑定。在这个方法中,首先调用绑定视图持有者类的bind方法,将列表项的数据与列表项的布局进行关联。这个方法会将数据绑定到视图数据绑定的对应变量上,从而实现数据与视图的自动同步。
进一步地,本申请实施例调用绑定视图持有者类的setItemEventHandler方法(holder.setItemEventHandler),设置列表项内部事件的处理对象。这个处理对象是本申请实施例在布局文件中定义的,它可以处理列表项内部(比如按钮、输入框等)的事件。
在一些实施例中,创建基础绑定适配器类,在基础绑定适配器类中定义数据变量,并对基础绑定适配器类的数据设置方法进行重写,包括:创建通用的基础绑定适配器类,基础绑定适配器类中设有抽象方法,抽象方法用于获取子类传入的列表项布局的资源标识符,基于列表项布局的资源标识符进行布局加载。
具体地,本申请实施例还描述了如何创建基础绑定适配器类,并对其数据设置方法进行重写。在这个实施例中,首先需要创建一个名为BaseBindingAda pter的类,这个类是一个通用的基础绑定适配器类。在这个类中定义了一个抽象方法getLayoutRes,这个方法用于获取子类传入的列表项布局的资源标识符。子类需要重写这个方法,返回对应的资源标识符。
进一步地,本申请实施例在BaseBindingAdapter类中定义了一个名为data的变量,用于接收列表的数据源。这个变量是可观察的,也就是说,当数据源中的数据发生变化时,与其绑定的视图会自动更新。
之后,本申请实施例对BaseBindingAdapter类的数据设置方法进行了重写。在这个方法中,本申请实施例首先检查新设置的数据源是否是可观察的,如果是,就为其添加一个数据变化的回调。这个回调在数据源中的数据发生变化时被触发,它会调用适配器的notifyDataSetChanged方法,使得视图自动更新。
进一步地,本申请实施例还创建了一个名为DefaultBindingAdapter的类,这个类继承自BaseBindingAdapter类,并且只传入了一个参数,即列表项布局的资源标识符。这个资源标识符就是getLayoutRes方法的返回值,它用于在创建列表项的视图数据绑定时加载对应的布局。
根据上述实施例提供的方法,通过这种方式,本申请实施例可以更方便地创建列表视图的适配器,同时也使得数据源的设置和更新变得更加灵活和高效。
在一些实施例中,该方法还包括:利用预定的绑定适配器注解,将基础绑定适配器类与列表视图组件进行关联,并在布局文件中配置数据源、布局数据以及相关事件数据。
具体地,本申请实施例还需要为RecyclerView扩展一个名为setData的方法。这个方法用于接收以下五种参数,分别是数据源(data)、列表项布局(itemLayout)、列表项点击事件(itemClick)、列表项视图类型(itemViewType)和列表项内部事件处理对象(itemEventHandler)。这个方法使用@BindingAda pter注解进行标记,这样就可以在布局文件中直接使用这个方法进行配置。
在一个示例中,@BindingAdapter注解的value属性是一个字符串数组,数组中的每一个元素都是一个参数名。这些参数名与setData方法的参数一一对应,因此本申请实施例可以在布局文件中为这些参数设置值。requireAll属性表示是否所有的参数都必须在布局文件中设置,如果设置为false,那么就可以只设置部分参数。
在setData方法中,本申请实施例首先创建一个DefaultBindingAdapter类的实例,然后为这个实例设置数据源、列表项布局、列表项点击事件、列表项视图类型和列表项内部事件处理对象。最后,本申请实施例将这个适配器实例设置为RecyclerView的适配器。
根据上述实施例提供的方法,通过这种方式,本申请实施例可以在布局文件中直接配置列表视图组件的数据源、布局数据以及相关事件数据,使得开发过程更加灵活和高效。
在一些实施例中,在每个数据变化的回调中调用基础绑定适配器类的对应刷新数据的方法,以便根据页面数据的变化自动刷新页面,包括:获取当前列表的基础绑定适配器类,判断当前列表的基础绑定适配器类是否为空,若当前列表的基础绑定适配器类为空,创建一个默认的绑定适配器类,设置列表数据和列表项点击事件,并将默认的绑定适配器类的数据设置给当前列表。
具体地,本申请实施例首先需要获取列表视图组件(RecyclerView)当前的绑定适配器类(adapter)。如果当前的适配器为空,那么本申请实施例就创建一个默认的绑定适配器类(DefaultBindingAdapter)。
进一步地,在创建DefaultBindingAdapter类的实例时,本申请实施例需要设置列表的数据源(data)、列表项的点击事件处理器(itemClickListener)、列表项视图类型的创建器(itemViewTypeCreator)以及列表项内部事件的处理器(itemEventHandler)。这些设置都可以通过DefaultBindingAdapter类的构造方法或者相应的setter方法进行。
在创建并设置完成DefaultBindingAdapter类的实例后,本申请实施例将这个实例设置为RecyclerView的适配器。这样,当RecyclerView中的数据源发生变化时,就会触发DefaultBindingAdapter类的数据变化回调,从而自动刷新页面。如果RecyclerView当前的适配器不为空,并且其类型为BaseBindingAdapt er,那么本申请实施例就重新设置一遍适配器的对应数据。这样,当数据源发生变化时,适配器也能够得到更新,从而保证页面的数据始终是最新的。
根据本申请实施例提供的技术方案,本申请实施例提出了一种使用DataBi nding技术封装RecyclerView实现快速开发列表功能框架的实现方法,能够显著提高Android应用的列表功能开发效率。通过DataBinding的扩展,本申请将列表项布局、列表数据及事件都通过布局文件配置到适配器中,进而在适配器中通过DataBinding加载列表项的布局文件,最终创建视图持有者并进行数据绑定。这种做法减少了适配器和视图持有者的开发代码,简化了开发过程。此外,本申请技术方案还实现了对数据源的自动更新,当数据源发生变化时,可以自动刷新对应的用户界面。这意味着开发人员无需手动更新用户界面,而是可以让系统根据数据源的变化自动更新,从而进一步提高开发效率。
综上所述,本申请实施例提供了一种高效的列表功能开发框架,这个框架减少了开发过程中的样板代码,使开发人员能够更专注于实现应用的核心功能,从而提高开发效率,减少开发成本,并且提高应用的性能和用户体验。
下述为本申请装置实施例,可以用于执行本申请方法实施例。对于本申请装置实施例中未披露的细节,请参照本申请方法实施例。
图2是本申请实施例提供的基于数据绑定技术的列表视图组件封装装置的结构示意图。如图2所示,该基于数据绑定技术的列表视图组件封装装置包括:
创建模块201,被配置为创建绑定视图持有者类,绑定视图持有者类继承自列表视图持有者,其中,绑定视图持有者类包含列表项的数据类型以及为列表项布局生成的视图数据绑定类;
设置模块202,被配置为在绑定视图持有者类中设置列表项数据与列表项布局之间的关联方法,并设置列表项内部事件处理对象,将列表项内部事件处理对象与列表项布局的处理器变量进行绑定;
生成模块203,被配置为根据布局文件中使用的变量,利用数据绑定库自动生成变量对应的变量值;
定义模块204,被配置为创建基础绑定适配器类,在基础绑定适配器类中定义数据变量,并对基础绑定适配器类的数据设置方法进行重写,其中,数据变量用于接收列表的数据源;
监听模块205,被配置为如果设置的数据类型为可观察列表,则为基础绑定适配器类添加用于监听数据变化的回调观察者列表变化监听器,在每个数据变化的回调中调用基础绑定适配器类的对应刷新数据的方法,以便根据页面数据的变化自动刷新页面。
在一些实施例中,图2的定义模块204在布局文件中定义一个用于接收列表项布局的资源标识符,并定义一个列表项视图类型创造者,其中,列表项视图类型创造者用于接收具有多种列表项布局类型时的布局数据。
在一些实施例中,图2的创建模块201实现创建绑定视图持有者类的方法时,判断列表项视图的条目是否创建,当列表项视图的条目已创建时,调用列表项布局获取方法来得到布局标识符,当列表项视图的条目未创建时,直接使用资源标识符;在获取到列表项布局的资源标识符后,利用数据绑定工具类的填充方法创建列表项布局的视图数据绑定,并通过视图数据绑定绑定视图持有者类并返回。
在一些实施例中,图2的设置模块202利用绑定视图持有者类的方法进行数据绑定时,调用绑定视图持有者类的绑定数据方法,以便将列表项数据与列表项布局进行关联;调用绑定视图持有者类的列表项内部事件处理对象设置方法,以设置列表项内部事件处理对象。
在一些实施例中,图2的定义模块204创建通用的基础绑定适配器类,基础绑定适配器类中设有抽象方法,抽象方法用于获取子类传入的列表项布局的资源标识符,基于列表项布局的资源标识符进行布局加载。
在一些实施例中,图2的关联模块206利用预定的绑定适配器注解,将基础绑定适配器类与列表视图组件进行关联,并在布局文件中配置数据源、布局数据以及相关事件数据。
在一些实施例中,图2的监听模块205获取当前列表的基础绑定适配器类,判断当前列表的基础绑定适配器类是否为空,若当前列表的基础绑定适配器类为空,创建一个默认的绑定适配器类,设置列表数据和列表项点击事件,并将默认的绑定适配器类的数据设置给当前列表。
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
图3是本申请实施例提供的电子设备3的结构示意图。如图3所示,该实施例的电子设备3包括:处理器301、存储器302以及存储在该存储器302中并且可以在处理器301上运行的计算机程序303。处理器301执行计算机程序303时实现上述各个方法实施例中的步骤。或者,处理器301执行计算机程序303时实现上述各装置实施例中各模块/单元的功能。
示例性地,计算机程序303可以被分割成一个或多个模块/单元,一个或多个模块/单元被存储在存储器302中,并由处理器301执行,以完成本申请。一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述计算机程序303在电子设备3中的执行过程。
电子设备3可以是桌上型计算机、笔记本、掌上电脑及云端服务器等电子设备。电子设备3可以包括但不仅限于处理器301和存储器302。本领域技术人员可以理解,图3仅仅是电子设备3的示例,并不构成对电子设备3的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如,电子设备还可以包括输入输出设备、网络接入设备、总线等。
处理器301可以是中央处理单元(Central Processing Unit,CPU),也可以是其它通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其它可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
存储器302可以是电子设备3的内部存储单元,例如,电子设备3的硬盘或内存。存储器302也可以是电子设备3的外部存储设备,例如,电子设备3上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,存储器302还可以既包括电子设备3的内部存储单元也包括外部存储设备。存储器302用于存储计算机程序以及电子设备所需的其它程序和数据。存储器302还可以用于暂时地存储已经输出或者将要输出的数据。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
在本申请所提供的实施例中,应该理解到,所揭露的装置/计算机设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/计算机设备实施例仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读存储介质中。基于这样的理解,本申请实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,计算机程序可以存储在计算机可读存储介质中,该计算机程序在被处理器执行时,可以实现上述各个方法实施例的步骤。计算机程序可以包括计算机程序代码,计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。计算机可读介质可以包括:能够携带计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、电载波信号、电信信号以及软件分发介质等。需要说明的是,计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如,在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。
Claims (10)
1.一种基于数据绑定技术的列表视图组件封装方法,其特征在于,包括:
创建绑定视图持有者类,所述绑定视图持有者类继承自列表视图持有者,其中,所述绑定视图持有者类包含列表项的数据类型以及为列表项布局生成的视图数据绑定类;
在所述绑定视图持有者类中设置列表项数据与所述列表项布局之间的关联方法,并设置列表项内部事件处理对象,将所述列表项内部事件处理对象与所述列表项布局的处理器变量进行绑定;
根据布局文件中使用的变量,利用数据绑定库自动生成所述变量对应的变量值;
创建基础绑定适配器类,在所述基础绑定适配器类中定义数据变量,并对所述基础绑定适配器类的数据设置方法进行重写,其中,所述数据变量用于接收列表的数据源;
如果设置的数据类型为可观察列表,则为所述基础绑定适配器类添加用于监听数据变化的回调观察者列表变化监听器,在每个数据变化的回调中调用所述基础绑定适配器类的对应刷新数据的方法,以便根据页面数据的变化自动刷新页面。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在所述布局文件中定义一个用于接收所述列表项布局的资源标识符,并定义一个列表项视图类型创造者,其中,所述列表项视图类型创造者用于接收具有多种列表项布局类型时的布局数据。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
实现创建所述绑定视图持有者类的方法时,判断列表项视图的条目是否创建,当所述列表项视图的条目已创建时,调用列表项布局获取方法来得到布局标识符,当所述列表项视图的条目未创建时,直接使用资源标识符;
在获取到所述列表项布局的资源标识符后,利用数据绑定工具类的填充方法创建所述列表项布局的视图数据绑定,并通过所述视图数据绑定所述绑定视图持有者类并返回。
4.根据权利要求1所述的方法,其特征在于,所述在所述绑定视图持有者类中设置列表项数据与所述列表项布局之间的关联方法,并设置列表项内部事件处理对象,包括:
利用所述绑定视图持有者类的方法进行数据绑定时,调用所述绑定视图持有者类的绑定数据方法,以便将所述列表项数据与所述列表项布局进行关联;调用所述绑定视图持有者类的列表项内部事件处理对象设置方法,以设置所述列表项内部事件处理对象。
5.根据权利要求1所述的方法,其特征在于,所述创建基础绑定适配器类,在所述基础绑定适配器类中定义数据变量,并对所述基础绑定适配器类的数据设置方法进行重写,包括:
创建通用的所述基础绑定适配器类,所述基础绑定适配器类中设有抽象方法,所述抽象方法用于获取子类传入的所述列表项布局的资源标识符,基于所述列表项布局的资源标识符进行布局加载。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
利用预定的绑定适配器注解,将所述基础绑定适配器类与列表视图组件进行关联,并在所述布局文件中配置数据源、布局数据以及相关事件数据。
7.根据权利要求1所述的方法,其特征在于,所述在每个数据变化的回调中调用所述基础绑定适配器类的对应刷新数据的方法,以便根据页面数据的变化自动刷新页面,包括:
获取当前列表的基础绑定适配器类,判断所述当前列表的基础绑定适配器类是否为空,若所述当前列表的基础绑定适配器类为空,创建一个默认的绑定适配器类,设置列表数据和列表项点击事件,并将所述默认的绑定适配器类的数据设置给当前列表。
8.一种基于数据绑定技术的列表视图组件封装装置,其特征在于,包括:
创建模块,被配置为创建绑定视图持有者类,所述绑定视图持有者类继承自列表视图持有者,其中,所述绑定视图持有者类包含列表项的数据类型以及为列表项布局生成的视图数据绑定类;
设置模块,被配置为在所述绑定视图持有者类中设置列表项数据与所述列表项布局之间的关联方法,并设置列表项内部事件处理对象,将所述列表项内部事件处理对象与所述列表项布局的处理器变量进行绑定;
生成模块,被配置为根据布局文件中使用的变量,利用数据绑定库自动生成所述变量对应的变量值;
定义模块,被配置为创建基础绑定适配器类,在所述基础绑定适配器类中定义数据变量,并对所述基础绑定适配器类的数据设置方法进行重写,其中,所述数据变量用于接收列表的数据源;
监听模块,被配置为如果设置的数据类型为可观察列表,则为所述基础绑定适配器类添加用于监听数据变化的回调观察者列表变化监听器,在每个数据变化的回调中调用所述基础绑定适配器类的对应刷新数据的方法,以便根据页面数据的变化自动刷新页面。
9.一种电子设备,包括存储器,处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至7中任一项所述的方法。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310962223.5A CN116974562A (zh) | 2023-07-31 | 2023-07-31 | 基于数据绑定技术的列表视图组件封装方法、装置及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310962223.5A CN116974562A (zh) | 2023-07-31 | 2023-07-31 | 基于数据绑定技术的列表视图组件封装方法、装置及介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116974562A true CN116974562A (zh) | 2023-10-31 |
Family
ID=88474575
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310962223.5A Pending CN116974562A (zh) | 2023-07-31 | 2023-07-31 | 基于数据绑定技术的列表视图组件封装方法、装置及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116974562A (zh) |
-
2023
- 2023-07-31 CN CN202310962223.5A patent/CN116974562A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108268253B (zh) | 接口代码生成方法及终端设备 | |
US9021440B1 (en) | System and method for automated test script generation | |
CN113076096B (zh) | 一种桌面应用程序开发方法、装置、设备及存储介质 | |
CN110347383B (zh) | 跨平台桌面应用的前端开发方法及装置 | |
EP4009162A1 (en) | Code change method and device | |
US20200125336A1 (en) | System and method for enhancing component based development models with auto-wiring | |
CN114327605B (zh) | 一种基于Vue远程表单生成方法、计算机及存储介质 | |
CN110941614A (zh) | 表单生成方法、装置、电子设备及计算机可读存储介质 | |
US11301366B2 (en) | Test automation systems and methods using logical identifiers | |
US10540150B2 (en) | Composable context menus | |
CN112528619A (zh) | 页面模板文件生成方法、装置、电子设备和存储介质 | |
CN111159301A (zh) | 一种基于智能合约的数据创建方法、装置、设备及存储介质 | |
CN114153473A (zh) | 模块集成方法、装置、存储介质及电子设备 | |
CN113656001A (zh) | 平台组件开发方法、装置、计算机设备及存储介质 | |
CN113448570A (zh) | 数据处理方法、装置、电子设备及存储介质 | |
CN112947907A (zh) | 一种创建代码分支的方法 | |
CN110673827A (zh) | 基于安卓系统的资源调用方法及装置、电子设备 | |
CN113568603B (zh) | 组件对象创建及接口方法调用方法、终端及存储装置 | |
CN116974562A (zh) | 基于数据绑定技术的列表视图组件封装方法、装置及介质 | |
CN114237407A (zh) | 一种字体图标处理方法、装置及计算机可读存储介质 | |
CN114741296A (zh) | 单元测试方法、装置、电子设备和存储介质 | |
US9552347B1 (en) | Data grid cell styling systems and methods | |
CN111198899B (zh) | 应用程序中实体渲染的开发系统及方法 | |
US20150277723A1 (en) | Exporting a component of a currently displayed user interface to a development system | |
CN111459933A (zh) | Gdb数据动态扩展方法、装置及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20240116 Address after: No. 13 Xingxiang Road, Zengjia Town, High tech Zone, Shapingba District, Chongqing, 400039 Applicant after: Chongqing Selis Phoenix Intelligent Innovation Technology Co.,Ltd. Address before: 401120 No. 618 Liangjiang Avenue, Longxing Town, Yubei District, Chongqing City Applicant before: Chongqing Celes New Energy Automobile Design Institute Co.,Ltd. |