卡片View生成程序的封装方法、生成方法及显示方法与流程

文档序号:32165653发布日期:2022-11-12 04:25阅读:64来源:国知局
卡片View生成程序的封装方法、生成方法及显示方法与流程
卡片view生成程序的封装方法、生成方法及显示方法
技术领域
1.本技术涉及android开发技术领域,具体而言,涉及一种卡片view生成程序的封装方法、生成方法及显示方法。


背景技术:

2.在android的移动端开发中,用列表来显示信息是一个基本的需求,android平台提供了recyclerview组件来实现这一需求。
3.使用recyclerview有个关键,那就是适配器recyclerview.adapter。适配器的主要作用是根据列表中的数据,使用不同的recyclerview.viewholder来创建卡片,并将数据绑定到卡片上进行显示,也就是说一种卡片样式对应一个viewholder。
4.请参阅图1,现有技术中,使用recyclerview来实现列表,一般按如下流程进行:
5.1)创建一个listadapter类继承recyclerview.adapter;
6.2)在listadapter中创建内部类viewholder类,继承recyclerview.viewholder,并在构造函数中通过layout布局文件生成卡片view,列表中有几种卡片就需要创建几个viewholder类;
7.3)listadapter类需要实现getitemviewtype函数,提供给recyclerview区分卡片类型;
8.4)listadapter类需要实现oncreateviewholder函数,根据卡片类型生成对应的viewholder;
9.5)listadapter类需要实现onbindviewholder函数,通过viewholder获取卡片view,将列表中的数据绑定到卡片view上;
10.6)将listadapter设置到recyclerview上,并填充数据刷新,recyclerview便会自动调用上面的函数创建卡片view、绑定数据。
11.当一个列表中需要显示的卡片样式较多时,比如好友聊天页面,需要文字、图片、视频、语音、表情、红包、礼物等卡片,我们需要创建大量的viewholder类。这些代码集中在一起就会造成在adapter中代码的臃肿和冗余,甚至由于工程师滥用开发语言的继承和多态特性,进一步加剧了卡片之间的耦合度,工程师在开发维护时需要思考并测试自己的改动会不会影响到其他卡片,技术成本越来越大。


技术实现要素:

12.本技术实施例的目的在于提供一种卡片view生成程序的封装方法、生成方法及显示方法,以在实现列表时,分离关注点,降低各部分之间的耦合度,进而降低开发难度和维护成本。
13.为了实现上述目的,本技术的实施例通过如下方式实现:
14.第一方面,本技术实施例提供一种卡片view生成程序的封装方法,包括:创建自定义view基类,用于提供公开函数和抽象绑定数据函数;创建一个viewholder类,用于存储卡
片view和提供公开函数;创建一个卡片类型实体,用于提供揭示卡片类型的卡片信息;创建adapter,用于根据所述卡片信息判断卡片类型,生成对应此卡片类型且继承于自定义view基类的卡片view,并进一步生成对应此卡片类型的viewholder对象,其中,adapter调用viewholder类提供的公开函数将数据传入viewholder对象,viewholder对象调用卡片view提供的公开函数将数据传入卡片view,以使卡片view通过绑定数据函数将viewholder对象传入的数据绑定到卡片view上。
15.在本技术实施例中,创建的adapter用于根据卡片信息判断卡片类型,生成对应此卡片类型且继承于自定义view基类的卡片view,并进一步生成对应此卡片类型的viewholder对象,adapter调用viewholder类提供的公开函数将数据传入viewholder对象,viewholder对象调用卡片view提供的公开函数将数据传入卡片view,以使卡片view通过绑定数据函数将viewholder对象传入的数据绑定到卡片view上。本方案使用自定义view将卡片view的创建和数据绑定逻辑封装了起来,进行了充分解耦,各个卡片之间互不影响,降低了开发维护的成本。并且基于创建的自定义view基类生成的卡片view可以在任意列表,任意布局中使用,极大地提高了复用性。二次封装adapter和viewholder主要是为使用自定义view基类自动创建对应卡片类型的卡片view而服务的,并且通过封装通用的部分,可以简化adapter的实现,不再需要创建多个viewholder(本方案创建的viewholder类可以通用),从而降低了开发难度和成本。
16.结合第一方面,在第一方面的第一种可能的实现方式中,创建自定义view基类,包括:将layout布局文件加载为view;定义数据实体,数据实体表示需要显示到卡片view上的数据;公开函数,供viewholder类调用以传入数据;抽象绑定数据函数,由卡片view实现绑定数据。
17.结合第一方面,在第一方面的第二种可能的实现方式中,创建一个viewholder类,包括:创建一个公用的recyclerview.viewholder类,用于存储卡片view;公开函数,供adapter调用以传入数据。
18.在该实现方式中,创建一个viewholder类,提供存储view实例(即卡片view)和绑定数据的能力(通过公开函数,供adapter调用以传入数据,使得放置于其中的卡片view可以绑定数据),并且,有了viewholder类,就不需要每个卡片view都创建一个viewholder类了。
19.结合第一方面,在第一方面的第三种可能的实现方式中,卡片信息包括卡片描述和卡片类别号,创建一个卡片类型实体,包括:创建一个卡片类型实体;添加卡片描述,用于供开发者识别;添加卡片类别号,用于供adapter识别;创建自定义的卡片view class,用于通过反射构造函数创建卡片view。
20.在该实现方式中,卡片信息包括卡片描述和卡片类别号,便于adapter和开发者识别卡片类型,自定义的卡片view class通过反射构造函数创建卡片view,这样可以支持各种卡片类型的卡片view的创建。
21.结合第一方面的第三种可能的实现方式,在第一方面的第四种可能的实现方式中,若卡片信息异常,自定义的卡片view class,还用于通过反射构造函数创建空白内容的卡片view。
22.在该实现方式中,若卡片信息异常(例如识别不出卡片类型),通过反射构造函数
创建空白内容的卡片view,可以容错。
23.结合第一方面,在第一方面的第五种可能的实现方式中,创建adapter,包括:针对数据列表中的数据对应单一卡片类型的情况:创建adapter,记为simplervadapter,且创建adapter后无需创建新的adapter;针对数据列表中的数据对应多种卡片类型的情况:创建adapter,继承于multiplervadapter。
24.在该实现方式中,针对数据列表中的数据对应单一卡片类型的情况:创建adapter,记为simplervadapter,且创建adapter后无需创建新的adapter,直接使用它即可,开发起来更加简单。针对数据列表中的数据对应多种卡片类型的情况:创建adapter,继承于multiplervadapter,可以支持多卡片类型。
25.第二方面,本技术实施例提供一种卡片view的生成方法,应用于基于第一方面或第一方面的可能的实现方式中任一项所述的卡片view生成程序的封装方法得到的卡片view生成程序,所述方法包括:通过adapter获取待显示数据,并判断待显示数据对应的卡片类型;通过adapter生成对应此卡片类型且继承于自定义view基类的卡片view,并进一步基于此卡片类型和生成的卡片view,创建对应此卡片类型的viewholder对象,其中,自定义view基类提供公开函数和抽象绑定数据函数,而viewholder类提供公开函数;通过adapter调用viewholder类提供的公开函数,将待显示数据传入viewholder对象;通过viewholder对象调用卡片view提供的公开函数,将待显示数据传入卡片view,以使卡片view通过绑定数据函数将待显示数据绑定到卡片view上。
26.结合第二方面,在第二方面的第一种可能的实现方式中,通过adapter生成对应此卡片类型且继承于自定义view基类的卡片view,包括:通过adapter中自定义的卡片view class,基于待显示数据对应的卡片类型,调用反射构造函数生成对应此卡片类型且继承于自定义view基类的卡片view。
27.第三方面,本技术实施例提供一种卡片view显示列表的方法,包括:遍历刷新数据列表,其中,数据列表中包含多条数据,每条数据有对应的卡片类型;将当前的数据传入基于第一方面或第一方面的可能的实现方式中任一项所述的卡片view生成程序的封装方法得到的卡片view生成程序中,通过卡片view生成程序运行第二方面或第二方面的第一种可能的实现方式中所述的卡片view的生成方法,生成与此数据对应的卡片类型相对应的卡片view;卡片view通过绑定数据函数将数据绑定到卡片view上,以通过卡片view显示数据。
28.在本技术实施例中,卡片view显示列表的方法可以遍历刷新数据列表,将当前的数据传入基于卡片view生成程序的封装方法得到的卡片view生成程序中,通过卡片view生成程序运行卡片view的生成方法,生成与此数据对应的卡片类型相对应的卡片view,再通过绑定数据函数将数据绑定到卡片view上,以通过卡片view显示数据,这样可以利用封装好的卡片view生成程序来根据数据对应的卡片类型创建相应的卡片view,进行了充分解耦,降低了开发维护的成本,提高了复用性,且简化了adapter的实现,不再需要创建多个viewholder。使得在卡片view显示列表的实现过程中,大部分代码已经封装好,只需简短的代码即可在各种类型的卡片view显示列表的场景中使用,大大降低了开发维护成本。
29.第四方面,本技术实施例提供一种存储介质,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行第一方面或第一方面的可能的实现方式中任一项所述的卡片view生成程序的封装方法,或者执行第二方面或第二方面的第一
种可能的实现方式所述的卡片view的生成方法,或者执行第三方面所述的卡片view显示列表的方法。
30.为使本技术的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
31.为了更清楚地说明本技术实施例的技术方案,下面将对本技术实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本技术的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
32.图1为现有技术中使用recyclerview来实现列表的流程示意图。
33.图2为本技术实施例提供的卡片view生成程序的封装方法的流程图。
34.图3为本技术实施例提供的卡片view的生成方法的流程图。
35.图4为本技术实施例提供的卡片view显示列表的方法的流程图。
36.图5为本技术实施例提供的卡片view显示列表的方法的流程示意图。
具体实施方式
37.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行描述。
38.为了便于理解,此处先对卡片view生成程序的封装过程进行介绍,请参阅图2,图2为本技术实施例提供的卡片view生成程序的封装方法的流程图。卡片view生成程序的封装方法可以包括步骤s11、步骤s12、步骤s13和步骤s14。
39.为了实现封装,需要配置基本元素,首先,可以执行步骤s11。
40.步骤s11:创建自定义view基类,用于提供公开函数和抽象绑定数据函数。
41.在本实施例中,首先可以创建自定义view基类,用于提供公开函数和抽象绑定数据函数。其中,公开函数可以供viewholder调用以传入数据,抽象绑定数据函数则可以由子类view(即继承于自定义view基类生成对的卡片view)实现细节,从而实现绑定数据。
42.示例性的,可以将layout布局文件加载为view,然后定义数据实体,数据实体表示需要显示到卡片view上的数据;公开函数,供viewholder类调用以传入数据;抽象绑定数据函数,由卡片view实现绑定数据。
43.kotlin语言代码示例:
[0044][0045]
创建自定义view基类后,可以执行步骤s12。
[0046]
步骤s12:创建一个viewholder类,用于存储卡片view和提供公开函数。
[0047]
在本实施例中,可以创建一个viewholder类,存储卡片view和提供公开函数。
[0048]
示例性的,可以创建一个公用的recyclerview.viewholder类,用于存储卡片view;然后公开函数,供adapter调用以传入数据。
[0049]
创建的viewholder类,可以提供存储view实例(即卡片view)和绑定数据的能力(通过公开函数,供adapter调用以传入数据,使得放置于其中的卡片view可以绑定数据),并且,有了此viewholder类,就不需要每个卡片view都创建一个viewholder类了。
[0050]
kotlin语言代码示例:
[0051][0052]
创建viewholder类后,可以执行步骤s13。
[0053]
步骤s13:创建一个卡片类型实体,用于提供揭示卡片类型的卡片信息。
[0054]
在本实施例中,可以创建一个卡片类型实体,用于提供揭示卡片类型的卡片信息,并配置所需的数据。
[0055]
示例性的,卡片信息可以包括卡片描述和卡片类别号,便于开发者和adapter识别卡片类型,那么,创建一个卡片类型实体的方式可以为:创建一个卡片类型实体;添加卡片描述,用于供开发者识别;添加卡片类别号,用于供adapter识别;创建自定义的卡片view class,用于通过反射构造函数创建卡片view。自定义的卡片view class通过反射构造函数创建卡片view,这样可以支持各种卡片类型的卡片view的创建。
[0056]
另外,为了提供容错机制,若卡片信息异常(例如识别不出卡片类型),可以利用自定义的卡片view class,通过反射构造函数创建空白内容的卡片view,可以容错。
[0057]
kotlin语言代码示例:
[0058][0059]
创建自定义view基类、viewholder类和卡片类型实体后,基本元素已准备完毕,可以创建关键的adapter了。此时可以执行步骤s14。
[0060]
步骤s14:创建adapter,用于根据所述卡片信息判断卡片类型,生成对应此卡片类型且继承于自定义view基类的卡片view,并进一步生成对应此卡片类型的viewholder对象,其中,adapter调用viewholder类提供的公开函数将数据传入viewholder对象,viewholder对象调用卡片view提供的公开函数将数据传入卡片view,以使卡片view通过绑定数据函数将viewholder对象传入的数据绑定到卡片view上。
[0061]
在本实施例中,创建的adapter,主要用于根据卡片信息判断卡片类型,生成对应此卡片类型且继承于自定义view基类的卡片view,并进一步生成对应此卡片类型的viewholder对象。运行时,adapter可以调用viewholder类提供的公开函数将数据传入viewholder对象,而viewholder对象可以调用卡片view提供的公开函数将数据传入卡片view,从而使得卡片view能够通过绑定数据函数将viewholder对象传入的数据绑定到卡片view上。由此可以实现adapter的功能。
[0062]
示例性的,理解方便,先提供简单的只支持一种卡片类型的adapter。针对数据列表中的数据对应单一卡片类型的情况:可以创建adapter,记为simplervadapter,且创建adapter后无需创建新的adapter,直接使用它即可,开发起来更加简单。
[0063]
kotlin语言代码示例:
[0064]
[0065]
[0066][0067]
了解前文介绍的简单的recyclerview适配器simplervadapter之后,此处将介绍适用多种卡片类型的recyclerview适配器multiplervadapter。针对数据列表中的数据对应多种卡片类型的情况:那么需要创建adapter,继承于multiplervadapter,这样可以支持多卡片类型。相比起来,对应多种卡片类型的adapter,多了配置所有的卡片类型、根据数据区分卡片类型的逻辑,最大的区别是需要创建新的adapter,继承multiplervadapter。
[0068]
kotlin语言代码示例:
[0069]
[0070]
[0071]
[0072][0073]
因此,卡片view生成程序的封装方法,创建的adapter用于根据卡片信息判断卡片类型,生成对应此卡片类型且继承于自定义view基类的卡片view,并进一步生成对应此卡片类型的viewholder对象,adapter调用viewholder类提供的公开函数将数据传入viewholder对象,viewholder对象调用卡片view提供的公开函数将数据传入卡片view,以使卡片view通过绑定数据函数将viewholder对象传入的数据绑定到卡片view上。本方案使用自定义view将卡片view的创建和数据绑定逻辑封装了起来,进行了充分解耦,各个卡片之间互不影响,降低了开发维护的成本。并且基于创建的自定义view基类生成的卡片view可以在任意列表,任意布局中使用,极大地提高了复用性。二次封装adapter和viewholder主要是为使用自定义view基类自动创建对应卡片类型的卡片view而服务的,并且通过封装通用的部分,可以简化adapter的实现,不再需要创建多个viewholder(本方案创建的viewholder类可以通用),从而降低了开发难度和成本。
[0074]
而通过卡片view生成程序的封装方法得到封装后的卡片view生成程序,可以实现与数据对应的卡片类型的卡片view的自动创建。对于卡片view生成程序,在使用时,可以将需要显示的数据输入其中,通过其运行卡片view的生成方法,就可以生成相应卡片类型的卡片view。
[0075]
请参阅图3,图3为本技术实施例提供的卡片view的生成方法的流程图。在本实施例中,卡片view的生成方法可以包括步骤s21、步骤s22、步骤s23、步骤s24。
[0076]
将数据输入后,卡片view生成程序首先可以运行步骤s21。
[0077]
步骤s21:通过adapter获取待显示数据,并判断待显示数据对应的卡片类型。
[0078]
在本实施例中,可以通过adapter获取输入的待显示数据,判断待显示数据对应的卡片类型。此处,可以通过实现getitemviewtype区分卡片类型。
[0079]
确定出待显示数据对应的卡片类型后,可以执行步骤s22。
[0080]
步骤s22:通过adapter生成对应此卡片类型且继承于自定义view基类的卡片view,并进一步基于此卡片类型和生成的卡片view,创建对应此卡片类型的viewholder对象,其中,自定义view基类提供公开函数和抽象绑定数据函数,而viewholder类提供公开函数。
[0081]
在本实施例中,可以通过adapter生成对应此卡片类型且继承于自定义view基类的卡片view,其中,自定义view基类提供公开函数和抽象绑定数据函数。
[0082]
示例性的,可以通过adapter中自定义的卡片view class,基于待显示数据对应的卡片类型,调用反射构造函数生成对应此卡片类型且继承于自定义view基类的卡片view。
[0083]
然后,可以进一步基于此卡片类型和生成的卡片view,创建对应此卡片类型的viewholder对象,其中,viewholder类提供公开函数。
[0084]
此处,由于viewholder类可以通用,对于不同的卡片类型,不需要另外创建viewholder类,而是生成对应卡片类型的viewholder对象即可,而生成的卡片view则可以
存储在viewholder对象中。
[0085]
生成对应卡片类型的卡片view和viewholder对象后,可以执行步骤s23。
[0086]
步骤s23:通过adapter调用viewholder类提供的公开函数,将待显示数据传入viewholder对象。
[0087]
在本实施例中,adapter调用viewholder类提供的公开函数,将待显示数据传入viewholder对象。
[0088]
将待显示数据传入viewholder对象后,可以执行步骤s24。
[0089]
步骤s24:通过viewholder对象调用卡片view提供的公开函数,将待显示数据传入卡片view,以使卡片view通过绑定数据函数将待显示数据绑定到卡片view上。
[0090]
在本实施例中,viewholder对象可以调用卡片view提供的公开函数,将待显示数据传入卡片view,基于此,卡片view就能够通过绑定数据函数将待显示数据绑定到卡片view上。
[0091]
此处,卡片view的生成方法的例子,可以参阅前文提供的kotlin语言代码示例(主要是针对数据列表中的数据对应多种卡片类型的情况时所提供的部分,其中也包含了卡片view的生成方法的运行过程)。
[0092]
而通过卡片view生成程序的封装方法得到封装后的卡片view生成程序,可以应用于实现列表的场景。
[0093]
请参阅图4,图4为本技术实施例提供的卡片view显示列表的方法的流程图。在本实施例中,卡片view显示列表的方法可以包括步骤s31、步骤s32和步骤s33。
[0094]
首先,对于需要实现列表的场景中,有需要显示的数据列表,数据列表中包含多条数据,每条数据有对应的卡片类型(可以是单一卡片类型,也可以是多种卡片类型,本实施例以多种卡片类型为例进行说明)。那么,可以执行步骤s31。
[0095]
步骤s31:遍历刷新数据列表,其中,数据列表中包含多条数据,每条数据有对应的卡片类型。
[0096]
在本实施例中,可以遍历刷新数据列表,每次能够获取到一条数据,以便基于这条数据运行卡片view的生成方法。由此,可以执行步骤s32。
[0097]
步骤s32:将当前的数据传入基于卡片view生成程序的封装方法得到的卡片view生成程序中,通过卡片view生成程序运行卡片view的生成方法,生成与此数据对应的卡片类型相对应的卡片view。
[0098]
在本实施例中,可以将当前的数据传入基于卡片view生成程序的封装方法得到的卡片view生成程序中,由卡片view生成程序运行卡片view的生成方法,自动生成与此数据对应的卡片类型相对应的卡片view。
[0099]
得到对应卡片类型相的卡片view后,可以执行步骤s33。
[0100]
步骤s33:卡片view通过绑定数据函数将数据绑定到卡片view上,以通过卡片view显示数据。
[0101]
在本实施例中,卡片view可以通过绑定数据函数将数据绑定到卡片view上,以通过卡片view显示数据。
[0102]
卡片view显示列表的方法可以遍历刷新数据列表,将当前的数据传入基于卡片view生成程序的封装方法得到的卡片view生成程序中,通过卡片view生成程序运行卡片
view的生成方法,生成与此数据对应的卡片类型相对应的卡片view,再通过绑定数据函数将数据绑定到卡片view上,以通过卡片view显示数据,这样可以利用封装好的卡片view生成程序来根据数据对应的卡片类型创建相应的卡片view,进行了充分解耦,降低了开发维护的成本,提高了复用性,且简化了adapter的实现,不再需要创建多个viewholder。使得在卡片view显示列表的实现过程中,大部分代码已经封装好,只需简短的代码即可在各种类型的卡片view显示列表的场景中使用,大大降低了开发维护成本。
[0103]
为了便于对本方案的理解,请参阅图5,图5为本技术实施例提供的卡片view显示列表的方法的流程示意图。如图5所示,其中填充灰色背景的部分,是针对一条数据创建卡片view时需要完成的流程,其余部分则是通过封装的程序(卡片view生成程序)自动运行,开发人员只需要关注这几个填充灰色背景的部分的实现,大大简化了代码量,降低开发维护成本。
[0104]
本技术实施例还提供一种存储介质,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行本实施例中的卡片view生成程序的封装方法,或者执行本实施例中的卡片view的生成方法,或者执行本实施例中的卡片view显示列表的方法。
[0105]
综上所述,本技术实施例提供一种卡片view生成程序的封装方法、生成方法及显示方法,创建的adapter用于根据卡片信息判断卡片类型,生成对应此卡片类型且继承于自定义view基类的卡片view,并进一步生成对应此卡片类型的viewholder对象,adapter调用viewholder类提供的公开函数将数据传入viewholder对象,viewholder对象调用卡片view提供的公开函数将数据传入卡片view,以使卡片view通过绑定数据函数将viewholder对象传入的数据绑定到卡片view上。本方案使用自定义view将卡片view的创建和数据绑定逻辑封装了起来,进行了充分解耦,各个卡片之间互不影响,降低了开发维护的成本。并且基于创建的自定义view基类生成的卡片view可以在任意列表,任意布局中使用,极大地提高了复用性。二次封装adapter和viewholder主要是为使用自定义view基类自动创建对应卡片类型的卡片view而服务的,并且通过封装通用的部分,可以简化adapter的实现,不再需要创建多个viewholder(本方案创建的viewholder类可以通用),从而降低了开发难度和成本。
[0106]
在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。
[0107]
以上所述仅为本技术的实施例而已,并不用于限制本技术的保护范围,对于本领域的技术人员来说,本技术可以有各种更改和变化。凡在本技术的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本技术的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1