1.本发明涉及计算机技术领域,尤其涉及一种视图加载方法、系统、计算机及可读存储介质。
背景技术:
2.loading在任何app中都有使用场景,而且主要是为了处理应用在请求网络接口获取数据的防止用户点击造成页面异常的问题。这也让应用在处理耗时操作的时候更加和谐,提升用户的使用体验,而不至于被打断。
3.目前的loading基本都是遮挡整个页面,的确有效的打断了用户的异常操作,当时也就是说这时候整个页面无法点击操作,只有等待耗时操作(比如网络请求结束后)结束后关闭loading,才能操作页面。但是目前的app,基本都是通过一个页面,然后加载多个fragment(片段)来呈现页面的内容,比如淘宝,首页、购物车等tab都是通过底部的点击来切换,但是这时候如果还是继续使用dialog来实现loading,很明显底部的四个按钮就点击无效了。只有等loading关闭后,才能继续点击其他的按钮来切换用户想要的内容。
技术实现要素:
4.基于此,本发明提供了一种视图加载方法、系统、计算机及可读存储介质,以至少解决上述相关技术中的不足。
5.为实现上述目的,本发明提供一种视图加载方法,包括:
6.根据目标片段获取到对应的视图,并将所述视图从所述视图的父布局中移除,得到新的父布局;
7.创建帧布局,并获取所述视图中的视图布局参数,将所述视图布局参数设置在所述帧布局中形成新的帧布局;
8.通过布局服务创建视图加载布局,并根据所述视图加载布局获取加载布局视图;
9.将所述视图与所述加载布局视图添加至所述新的帧布局后,将所述新的帧布局设置到所述新的父布局中,形成目标视图以使用户根据所述目标视图进行视图加载。
10.优选的,将所述视图从所述视图的父布局中移除,得到新的父布局的步骤包括:
11.调用父节点函数获取所述视图的父布局;
12.调用所述父布局的移除视图函数将所述视图从所述父布局中移除得到新的父布局。
13.优选的,所述创建帧布局,并获取所述视图中的视图布局参数,将所述视图布局参数设置在所述帧布局中形成新的帧布局的步骤还包括:
14.通过关键字创建帧布局,并调用视图布局参数获取函数获取所述视图中的视图布局参数;
15.调用参数布局函数将所述视图布局参数设置在所述帧布局中形成新的帧布局。
16.优选的,所述方法还包括:
17.当接收到所述目标视图的视图加载指令时,若所述目标视图为展示类型,解析出所述目标视图中的视图加载布局,并将所述视图加载布局中的可见性属性设置成可见视图属性,以使所述目标视图以可见形式加载;
18.若所述目标视图为隐藏类型,解析出所述目标视图中的视图加载布局,并将所述视图加载布局中的可见性属性设置成隐藏视图属性,以使所述目标视图进行隐藏。
19.优选的,所述方法还包括:
20.创建映射列表数组,并通过多个所述目标片段的哈希码将多个所述目标视图的视图加载添加至所述映射列表数组中;
21.当获取到新的目标片段、且所述新的目标片段为展示加载类型时,通过所述新的目标片段的哈希码在所述映射列表数组查找是否存在与所述新的目标片段对应的目标视图的视图加载;
22.若所述映射列表数组存在与所述新的目标片段对应的目标视图的视图加载,则直接调用所述对应的目标视图的视图加载对所述新的目标片段进行视图加载;
23.若所述映射列表数组不存在与所述新的目标片段对应的目标视图的视图加载,则根据所述新的目标片段重新创建新的视图加载,并将所述新的视图加载添加到所述映射列表数组中。
24.优选的,所述方法还包括:
25.当获取到新的目标片段、且所述新的目标片段为隐藏类型时,通过所述新的目标片段的哈希码在所述映射列表数组查找对应的视图加载,直接关闭所述视图加载以使所述新的目标片段隐藏。
26.为实现上述目的,本发明还提供了一种视图加载系统,包括:
27.获取模块,用于根据目标片段获取到对应的视图,并将所述视图从所述视图的父布局中移除,得到新的父布局;
28.第一创建模块,用于创建帧布局,并获取所述视图中的视图布局参数,将所述视图布局参数设置在所述帧布局中形成新的帧布局;
29.第二创建模块,用于通过布局服务创建视图加载布局,并根据所述视图加载布局获取加载布局视图;
30.加载模块,用于将所述视图与所述加载布局视图添加至所述新的帧布局后,将所述新的帧布局设置到所述新的父布局中,形成目标视图以使用户根据所述目标视图进行视图加载。
31.优选的,所述获取模块包括:
32.第一调用单元,用于调用父节点函数获取所述视图的父布局;
33.第二调用单元,用于调用所述父布局的移除视图函数将所述视图从所述父布局中移除得到新的父布局。
34.优选的,所述第一创建模块包括:
35.第三调用单元,用于通过关键字创建帧布局,并调用视图布局参数获取函数获取所述视图中的视图布局参数;
36.第四调用单元,用于调用参数布局函数将所述视图布局参数设置在所述帧布局中形成新的帧布局。
37.优选的,所述系统还包括:
38.解析模块,用于当接收到所述目标视图的视图加载指令时,若所述目标视图为展示类型,解析出所述目标视图中的视图加载布局,并将所述视图加载布局中的可见性属性设置成可见视图属性,以使所述目标视图以可见形式加载;
39.第一处理模块,用于若所述目标视图为隐藏类型,解析出所述目标视图中的视图加载布局,并将所述视图加载布局中的可见性属性设置成隐藏视图属性,以使所述目标视图进行隐藏。
40.优选的,所述系统还包括:
41.第三创建模块,用于创建映射列表数组,并通过多个所述目标片段的哈希码将多个所述目标视图的视图加载添加至所述映射列表数组中;
42.查找模块,用于当获取到新的目标片段、且所述新的目标片段为展示加载类型时,通过所述新的目标片段的哈希码在所述映射列表数组查找是否存在与所述新的目标片段对应的目标视图的视图加载;
43.第二处理模块,用于若所述映射列表数组存在与所述新的目标片段对应的目标视图的视图加载,则直接调用所述对应的目标视图的视图加载对所述新的目标片段进行视图加载;
44.第三处理模块,用于若所述映射列表数组不存在与所述新的目标片段对应的目标视图的视图加载,则根据所述新的目标片段重新创建新的视图加载,并将所述新的视图加载添加到所述映射列表数组中。
45.优选的,所述系统还包括:
46.第四处理模块,用于当获取到新的目标片段、且所述新的目标片段为隐藏类型时,通过所述新的目标片段的哈希码在所述映射列表数组查找对应的视图加载,直接关闭所述视图加载以使所述新的目标片段隐藏。
47.为实现上述目的,本发明还提供了一种计算机,包括存储器和处理器,所述存储器中存储有计算机可读指令,所述计算机可读指令被所述处理器执行时,使得所述处理器执行如上视图加载方法的步骤。
48.为实现上述目的,本发明还提供了一种计算机可读存储介质,存储有计算机可读指令,所述计算机可读指令被处理器执行时实现如上视图加载方法的步骤。
49.上述本发明提供了一种视图加载方法、系统、计算机及可读存储介质,通过创建新的帧布局,然后包裹所传入的视图,并且在该视图同级添加了一个加载布局视图,生产目标视图,使得用户能够根据目标视图进行视图加载;目标视图的视图加载支持片段级别的加载展示,可以为所有的片段添加加载,完美解决了一个页面中有多个片段的加载显示需求,从而不遮挡用户点击其他片段的操作;通过加载工具类管理所有的视图加载,任何片段只会存在一个加载,从而不会出现多个加载同时展示的现象;并且通过记录片段的哈希码,极大的优化了加载带来的内存开销,一个片段只会存在一个加载,可以做到第一次创建,重复使用的下过,大大降低了内存开销,提升使用体验。
附图说明
50.为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例的描述中所
需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
51.图1是本发明一实施例中视图加载方法的一应用环境示意图;
52.图2是本发明一实施例中视图加载方法的一流程图;
53.图3是图2中步骤s101的详细流程图;
54.图4是图2中步骤s102的详细流程图;
55.图5是本发明一实施例中视图加载方法的另一流程图;
56.图6是本发明一实施例中视图加载方法的另一流程图;
57.图7是本发明一实施例中视图加载系统的结构示意图;
58.图8是本发明一实施例中计算机的一示意图。
具体实施方式
59.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
60.本技术提供了一种视图加载方法,是基于fragment中的layout(布局)实现的loading,因为在android中fragment往往有一个父布局,这个布局就是用户设置的进去的,那就很容易拿到这个布局,然后对这个布局展开loading的加载,这样对于多元化的app首页(目前主流app首页基本上是多个fragment组成的),就可以完美的在对应的模块(fragment)中展示loading了。本技术的试图加载方法具有以下创新点:
61.一、基于fragment的布局view实现viewloading(视图加载),也就是说只需要传入对应需要展示的fragment和该fragment的布局view即可。
62.1、创建viewloading类,并且创建该viewloading的构造方法。构造方法有两个参数fragment和view,即:void(空洞)viewloading(fragment fragment,view view)。
63.2、在构造方法中,通过调用view.getparent()获取到该view的父布局,然后通过调用该父布局的removeview(view)方法,将该view从父布局中移除。(由于android系统中,任何一个子view只能有一个父布局,锁为了添加loadinglayoutview,需要先移除该view的父布局)。
64.3、通过new关键字创建framelayout(帧布局),然后通过调用view.getlayoutparams获取到layoutparmas并且将该layoutparmas通过setlayoutparams设置给上面创建的framelayout。主要是将该view的布局约束等特性设置给新创建的容器。
65.4、然后将该framelayout设置给view的父布局,也就是调用parent的addview方法。通过layoutinflater的form方法,创建viewloading布局,获取到loadinglayoutview,最后就是依次调用将view、loadinglayoutview,通过addview方法,加入到framelayout布局中。
66.5、最后组装完成就是一个新建的framelayout,然后包裹了传入的view,并且在该view同级添加了一个loadinglayoutview。使得loading盖在view上面,这样就是显示在上
方。
67.二、创建showloading、hideloading方法
68.1、第一步中viewloading创建好了以后,需要控制该viewloading的显示和隐藏了。主要就是2个方法,一个是显示,一个是隐藏。分别是showloding,主要是通过viewloading获取到loadinglayoutview,并将visibility属性设置成view.visille。如果是hideloading,只需要将visibility设置为view.gone。
69.三、loadingutils管理所有的viewloading,并且一个view只会创建一个loadingutils。
70.1、需要创建一个loadingmaplist数组,在每次创建viewloading的时候都必须要添加进来,通过fragment的hashcode作为key,viewloading作为value存到map中进行管理。
71.2、创建showloading方法,在该方法中,直接通过传入fragment的hashcode作为可以去loadingmaplist查找是否有已经创建的viewloading。如果存在则直接调用该viewloading的showloading方法显示loading即可。如果不存在,则创建一个全新的viewloading,并添加该loading到loadingmaplist数组中。
72.3、创建hideloading方法,在该方法中,直接通过传入fragment的hashcode作为可以去loadingmaplist查找对应的viewloading,直接调用该viewloading的hideloading方法关闭viewloading即可。
73.4、整个过程中,一个fragment中将只会存在一个loading,减少内存开销,复用loading,提升用户体验。一个页面也不可能出现2个loading的奇怪现象。
74.本技术的视图加载方法具有以下有益效果:
75.1、viewloading支持fragment级别的loading展示,可以给任何一个fragment添加loading。完美的解决了一个页面中有多个fragment的loading显示需求,从而不遮挡用户点击其他fragment的操作。
76.2、通过loadingutils管理了所有的viewloading,任何fragment只会存在一个loading,从而不会出现多个loading同时展示。
77.3、由于记录了fragment的hashcode,所以极大的优化了loadinbg带来的内存开销,一个fragment只会创建一个loading,可以做到第一次用创建,后面重复使用的效果。也大大降低了内存开销,优化app的使用体验。
78.本技术提供的视图加载方法,可应用在如图1的计算机中,其中,该计算机可通过网络与服务器进行通信。其中,该计算机包括但不限于各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备。服务器可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
79.在一实施例中,如图2所示,提供一种视图加载方法,以该方法应用在图1中的计算机为例进行说明,包括如下步骤s101至s104。
80.s101,根据目标片段获取到对应的视图,并将所述视图从所述视图的父布局中移除,得到新的父布局;
81.其中,请参阅图3,步骤s101具体包括步骤s1011~s1012。
82.s1011,调用父节点函数获取所述视图的父布局;
83.s1012,调用所述父布局的移除视图函数将所述视图从所述父布局中移除得到新
的父布局。
84.需要说明的是,视图(view)是一个矩形区域,它负责这个区域里的绘制和事件处理。视图类是android用户界面的基础类之一。本技术提出的是基于fragment中的layout实现的loading,因为在android中fragment往往有一个父布局,针对该父布局展开loading的加载,对于多元化的app首页能够完美的在对应的模块中展示loading。
85.以下为本技术的举例说明:
86.用户在使用淘宝时中底部有4个按钮,上面4个是分别不同功能的4个模块,如果用dialog实现,loading在加载过程中会同时覆盖底部的4个按钮,用户无法切换。在此技术中,本技术用fragment来加载,比如「首页」正在加载,本技术的loading只会加载在首页上,不影响底部的4个按钮的操作,也不影响其余3个模块的操作。
87.本技术是基于fragment的布局view实现viewloading,只需要传入对应需要展示的fragment和该fragment的布局view即可。
88.android运行在各种各样的设备中,有小屏幕的手机,超大屏的平板甚至电视。针对屏幕尺寸的差距,很多情况下,都是先针对手机开发一套app,然后拷贝一份,修改布局以适应平板等超级大屏的设备。目前无法做到一个app可以同时适应手机和平板。fragment的出现就是为了解决这样的问题。可以把fragment当成activity的一个界面的一个组成部分,甚至activity的界面可以完全有不同的fragment组成,更重要的是fragment拥有自己的生命周期和接收、处理用户的事件,这样就不必在activity写一堆控件的事件处理的代码了。并且,用户还可以动态的添加、替换和移除某个fragment。fragment必须是依存与activity而存在的,因此activity的生命周期会直接影响到fragment的生命周期。
89.在具体实施时,首先需要创建viewloading类,并且创建该viewloading的构造方法。构造方法有两个参数fragment和view,即:void、viewloading(fragment fragment,view view)。
90.在构造方法中,通过调用view.getparent()获取到该view的父布局,然后通过调用该父布局的removeview(view)方法,将该view从父布局中移除。(由于android系统中,任何一个子view只能有一个父布局,所以为了添加loadinglayoutview,需要先移除该view的父布局)。
91.s102,创建帧布局,并获取所述视图中的视图布局参数,将所述视图布局参数设置在所述帧布局中形成新的帧布局;
92.其中,请参阅图4,步骤s102具体包括步骤s1021~s1022。
93.s1021,通过关键字创建帧布局,并调用视图布局参数获取函数获取所述视图中的视图布局参数;
94.s1022,调用参数布局函数将所述视图布局参数设置在所述帧布局中形成新的帧布局。
95.在具体实施时,通过new关键字创建framelayout,然后通过调用view.getlayoutparams获取到layoutparmas并且将该layoutparmas通过setlayoutparams设置给上面创建的framelayout。
96.需要说明的是,layoutparams是viewgroup的一个内部类,这是一个基类,例如framelayout、linearlayout等等,内部都有自己的layoutparams,获取到layoutparams的
目的也是为了创建需要的布局,然后对于布局的样式、约束、位置等都需要和原来的布局保持一致,才能在加载loading的时候不影响原来的页面布局,从而保证视觉上的一致。
97.layoutparams继承于android.view.viewgroup.layoutparams相当于一个layout的信息包,它封装了layout的位置、高、宽等信息。假设在屏幕上一块区域是由一个layout占领的,如果将一个view添加到一个layout中,需要传递layout用户期望的布局方式,也就是将一个认可的layoutparams传递进去。
98.通俗地讲,layoutparams类是用于child view(子视图)向parent view(父视图)传达自己的意愿的一个东西。举个例子,子视图和父视图分别可以简单理解成一个linearlayout和该linearlayout里边的一个textview的关系,textview就算linearlayout的子视图child view。需要注意的是layoutparams只是viewgroup的一个内部类这里边这个也就是viewgroup里边这个layoutparams类是base class基类实际上每个不同的viewgroup都有自己的layoutparams子类。比如abslistview.layoutparams,absolutelayout.layoutparams,gallery.layoutparams,viewgroup.marginlayoutparams,windowmanager.layoutparams等。
99.layoutparams,每个view都需要一个layoutparams,告诉父容器的一些规则和方式,这时候该view的layoutparams要与父容器的layoutparam相相对应,比如该view的父容器使用的linearlayout.layoutparam,该view的布局类型也要对应着linearlayout.layoutparam。
100.可以理解的,该步骤主要是为了将该view的布局约束等特性设置给新创建的容器。
101.s103,通过布局服务创建视图加载布局,并根据所述视图加载布局获取加载布局视图;
102.在具体实施时,调用parent的addview方法该framelayout设置给view的父布局,然后通过layoutinflater的form方法,创建对应的viewloading布局,获取到loadinglayoutview。
103.s104,将所述视图与所述加载布局视图添加至所述新的帧布局后,将所述新的帧布局设置到所述新的父布局中,形成目标视图以使用户根据所述目标视图进行视图加载。
104.在具体实施时,依次调用将view、loadinglayoutview,通过addview方法,加入到framelayout布局中。
105.最后组装完成就是一个新建的framelayout,然后包裹了所传入的view,并且在该view同级添加了一个loadinglayoutview。使得loading盖在view上面,这样就是显示在上方。
106.在本技术中,在完成目标视图的生成后,控制该viewloading的显示和隐藏了。分别是showloding和hideloading,主要是通过viewloading获取到loadinglayoutview,并将visibility属性设置成view.visille。如果是hideloading,只需要将visibility设置为view.gone。
107.需要说明的是,一个view都只会创建一个loadingutils,并通过loadingutils管理所有的viewloading。
108.在每次创建viewloading的时候都必须将预先创建的loadingmaplist数组添加进
来,通过fragment的hashcode作为key,viewloading作为value存到map中进行管理。
109.在本技术中,在创建showloding方法中,直接通过传入fragment的hashcode作为可以去loadingmaplist查找是否有已经创建的viewloading。如果存在则直接调用该viewloading的showloading方法显示loading即可。如果不存在,则创建一个全新的viewloading,并添加该loading到loadingmaplist数组中。
110.在创建hideloading方法中,直接通过传入fragment的hashcode作为可以去loadingmaplist查找对应的viewloading,直接调用该viewloading的hideloading方法关闭viewloading即可。
111.可以理解的,通过上述设置,一个fragment中将只会存在一个loading,减少内存开销,复用loading,提升用户体验。一个页面也不可能出现2个loading的奇怪现象。
112.本发明通过创建新的帧布局,然后包裹所传入的视图,并且在该视图同级添加了一个加载布局视图,生产目标视图,使得用户能够根据目标视图进行视图加载;目标视图的视图加载支持片段级别的加载展示,可以为所有的片段添加加载,完美解决了一个页面中有多个片段的加载显示需求,从而不遮挡用户点击其他片段的操作。
113.根据上述的视图加载方法,通过创建新的帧布局,然后包裹所传入的视图,并且在该视图同级添加了一个加载布局视图,生产目标视图,使得用户能够根据目标视图进行视图加载;目标视图的视图加载支持片段级别的加载展示,可以为所有的片段添加加载,完美解决了一个页面中有多个片段的加载显示需求,从而不遮挡用户点击其他片段的操作;通过加载工具类管理所有的视图加载,任何片段只会存在一个加载,从而不会出现多个加载同时展示的现象;并且通过记录片段的哈希码,极大的优化了加载带来的内存开销,一个片段只会存在一个加载,可以做到第一次创建,重复使用的下过,大大降低了内存开销,提升使用体验。
114.此外,作为一个具体示例,请参阅图5,所述方法还包括:
115.s201,当接收到所述目标视图的视图加载指令时,若所述目标视图为展示类型,解析出所述目标视图中的视图加载布局,并将所述视图加载布局中的可见性属性设置成可见视图属性,以使所述目标视图以可见形式加载;
116.s202,若所述目标视图为隐藏类型,解析出所述目标视图中的视图加载布局,并将所述视图加载布局中的可见性属性设置成隐藏视图属性,以使所述目标视图进行隐藏。
117.在具体实施时,当用户需要根据所述目标视图进行视图加载之前,需要对目标视图创建showloding以及hideloading来控制该视图加载是否可见形式或隐藏形式,在创建showloding方法中,直接通过传入fragment的hashcode作为可以去loadingmaplist查找是否有已经创建的viewloading。如果存在则直接调用该viewloading的showloading方法显示loading即可。如果不存在,则创建一个全新的viewloading,并添加该loading到loadingmaplist数组中。
118.在创建hideloading方法中,直接通过传入fragment的hashcode作为可以去loadingmaplist查找对应的viewloading,直接调用该viewloading的hideloading方法关闭viewloading即可。
119.当用户需要根据所述目标视图进行视图加载时,通过viewloading获取到loadinglayoutview,若所述目标视图为展示加载类型,则将loadinglayoutview中
visibility属性设置为view.visille,若所述目标视图为隐藏加载类型,则将loadinglayoutview中visibility属性设置为view.gone。
120.此外,作为一个具体示例,请参阅图6,所述方法还包括:
121.s301,创建映射列表数组,并通过多个所述目标片段的哈希码将多个所述目标视图的视图加载添加至所述映射列表数组中;
122.s302,当获取到新的目标片段、且所述新的目标片段为展示加载类型时,通过所述新的目标片段的哈希码在所述映射列表数组查找是否存在与所述新的目标片段对应的目标视图的视图加载;
123.s303,若所述映射列表数组存在与所述新的目标片段对应的目标视图的视图加载,则直接调用所述对应的目标视图的视图加载对所述新的目标片段进行视图加载;
124.s304,若所述映射列表数组不存在与所述新的目标片段对应的目标视图的视图加载,则根据所述新的目标片段重新创建新的视图加载,并将所述新的视图加载添加到所述映射列表数组中;
125.s305,当获取到新的目标片段、且所述新的目标片段为隐藏类型时,通过所述新的目标片段的哈希码在所述映射列表数组查找对应的视图加载,直接关闭所述视图加载以使所述新的目标片段隐藏。
126.需要说明的是,android可以用java开发,java的object是自带hashcode获取的方法的,可以直接调用gethashcode()方法就能直接获取,也是唯一的。
127.在具体实施时,通过创建映射列表数组将多个所述目标视图的视图加载添加至所述映射列表数组中,当获取到新的目标片段时,首先解析出所述新的目标片段的哈希码以及所述新的目标片段的视图中的可视化属性,若所述可视化属性为可见视图属性,则根据所述新的目标片段的哈希码在所述映射列表数组中查找是否存在对应的目标视图的视图加载,如果存在则直接调用该目标视图的视图加载对所述新的目标片段进行试图加载,如果不存在则为所述新的目标片段按上述步骤s101~s104重新创建新的视图加载,并将该视图加载添加至所述映射列表数组中,以便于重复使用。
128.若所述可视化属性为隐藏视图属性,则根据所述新的目标片段的哈希码在所述映射列表数组中查找对应的目标视图的视图加载,根据所述对应的目标视图的视图加载,直接关闭所述视图加载以使所述新的目标片段隐藏。
129.应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
130.在一个可选的实施方式中,还可以:将上述视图加载方法的结果上传至区块链中。
131.具体地,基于所述述视图加载方法的结果得到对应的摘要信息,具体来说,摘要信息由所述视图加载方法的结果进行散列处理得到,比如利用sha256s算法处理得到。将摘要信息上传至区块链可保证其安全性和对用户的公正透明性。用户可以从区块链中下载得该摘要信息,以便查证所述视图加载方法的结果是否被篡改。本示例所指区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和
生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层等。
132.在一实施例中,提供一种视图加载系统,该视图加载系统与上述实施例中视图加载方法一一对应。如图7所示,该视图加载系统100包括获取模块11、第一创建模块12、第二创建模块13、加载模块14。各功能模块详细说明如下:
133.获取模块11,用于根据目标片段获取到对应的视图,并将所述视图从所述视图的父布局中移除,得到新的父布局;
134.第一创建模块12,用于创建帧布局,并获取所述视图中的视图布局参数,将所述视图布局参数设置在所述帧布局中形成新的帧布局;
135.第二创建模块13,用于通过布局服务创建视图加载布局,并根据所述视图加载布局获取加载布局视图;
136.加载模块14,用于将所述视图与所述加载布局视图添加至所述新的帧布局后,将所述新的帧布局设置到所述新的父布局中,形成目标视图以使用户根据所述目标视图进行视图加载。
137.本实施例中,所述获取模块11包括:
138.第一调用单元,用于调用父节点函数获取所述视图的父布局;
139.第二调用单元,用于调用所述父布局的移除视图函数将所述视图从所述父布局中移除得到新的父布局。
140.本实施例中,所述第一创建模块12包括:
141.第三调用单元,用于通过关键字创建帧布局,并调用视图布局参数获取函数获取所述视图中的视图布局参数;
142.第四调用单元,用于调用参数布局函数将所述视图布局参数设置在所述帧布局中形成新的帧布局。
143.在一个可选的实施方式中,所述系统还包括:
144.解析模块,用于当接收到所述目标视图的视图加载指令时,若所述目标视图为展示类型,解析出所述目标视图中的视图加载布局,并将所述视图加载布局中的可见性属性设置成可见视图属性,以使所述目标视图以可见形式加载;
145.第一处理模块,用于若所述目标视图为隐藏类型,解析出所述目标视图中的视图加载布局,并将所述视图加载布局中的可见性属性设置成隐藏视图属性,以使所述目标视图进行隐藏。
146.在一个可选的实施方式中,所述系统还包括:
147.第三创建模块,用于创建映射列表数组,并通过多个所述目标片段的哈希码将多个所述目标视图的视图加载添加至所述映射列表数组中;
148.查找模块,用于当获取到新的目标片段、且所述新的目标片段为展示加载类型时,通过所述新的目标片段的哈希码在所述映射列表数组查找是否存在与所述新的目标片段对应的目标视图的视图加载;
149.第二处理模块,用于若所述映射列表数组存在与所述新的目标片段对应的目标视图的视图加载,则直接调用所述对应的目标视图的视图加载对所述新的目标片段进行视图加载;
150.第三处理模块,用于若所述映射列表数组不存在与所述新的目标片段对应的目标
视图的视图加载,则根据所述新的目标片段重新创建新的视图加载,并将所述新的视图加载添加到所述映射列表数组中。
151.在一个可选的实施方式中,所述系统还包括:
152.第四处理模块,用于当获取到新的目标片段、且所述新的目标片段为隐藏类型时,通过所述新的目标片段的哈希码在所述映射列表数组查找对应的视图加载,直接关闭所述视图加载以使所述新的目标片段隐藏。
153.通过本实施例提出的视图加载系统,通过创建新的帧布局,然后包裹所传入的视图,并且在该视图同级添加了一个加载布局视图,生产目标视图,使得用户能够根据目标视图进行视图加载;目标视图的视图加载支持片段级别的加载展示,可以为所有的片段添加加载,完美解决了一个页面中有多个片段的加载显示需求,从而不遮挡用户点击其他片段的操作;通过加载工具类管理所有的视图加载,任何片段只会存在一个加载,从而不会出现多个加载同时展示的现象;并且通过记录片段的哈希码,极大的优化了加载带来的内存开销,一个片段只会存在一个加载,可以做到第一次创建,重复使用的下过,大大降低了内存开销,提升使用体验。
154.其中上述模块/单元中的“第一”和“第二”的意义仅在于将不同的模块/单元加以区分,并不用于限定哪个模块/单元的优先级更高或者其它的限定意义。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或模块的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或模块,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或模块,本技术中所出现的模块的划分,仅仅是一种逻辑上的划分,实际应用中实现时可以有另外的划分方式。
155.关于视图加载系统的具体限定可以参见上文中对于视图加载方法的限定,在此不再赘述。上述视图加载系统中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机中的处理器中,也可以以软件形式存储于计算机中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
156.在一个实施例中,提供了一种计算机,该计算机可以是终端,其内部结构图可以如图8所示。该计算机包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机的处理器用于提供计算和控制能力。该计算机的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机的网络接口用于与外部服务器通过网络连接通信。该计算机程序被处理器执行时以实现一种视图加载方法。
157.在一个实施例中,提供了一种计算机,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述实施例中视图加载方法的步骤,例如图2所示的步骤s101至步骤s104及该方法的其它扩展和相关步骤的延伸。或者,处理器执行计算机程序时实现上述实施例中视图加载系统的各模块/单元的功能,例如图7所示模块11至模块14的功能。为避免重复,这里不再赘述。
158.所述处理器可以是中央处理单元(central processing unit,cpu),还可以是其他通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现成可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、
分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述计算机装置的控制中心,利用各种接口和线路连接整个计算机装置的各个部分。
159.所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述计算机装置的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、视频数据等)等。
160.所述存储器可以集成在所述处理器中,也可以与所述处理器分开设置。
161.在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述实施例中视图加载方法的步骤,例如图2所示的步骤s101至步骤s104及该方法的其它扩展和相关步骤的延伸。或者,计算机程序被处理器执行时实现上述实施例中视图加载系统的各模块/单元的功能,例如图7所示模块11至模块14的功能。为避免重复,这里不再赘述。
162.本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本技术所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。
163.所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。
164.以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。
技术特征:
1.一种视图加载方法,其特征在于,包括:根据目标片段获取到对应的视图,并将所述视图从所述视图的父布局中移除,得到新的父布局;创建帧布局,并获取所述视图中的视图布局参数,将所述视图布局参数设置在所述帧布局中形成新的帧布局;通过布局服务创建视图加载布局,并根据所述视图加载布局获取加载布局视图;将所述视图与所述加载布局视图添加至所述新的帧布局后,将所述新的帧布局设置到所述新的父布局中,形成目标视图以使用户根据所述目标视图进行视图加载。2.根据权利要求1所述的视图加载方法,其特征在于,将所述视图从所述视图的父布局中移除,得到新的父布局的步骤包括:调用父节点函数获取所述视图的父布局;调用所述父布局的移除视图函数将所述视图从所述父布局中移除得到新的父布局。3.根据权利要求1所述的视图加载方法,其特征在于,所述创建帧布局,并获取所述视图中的视图布局参数,将所述视图布局参数设置在所述帧布局中形成新的帧布局的步骤还包括:通过关键字创建帧布局,并调用视图布局参数获取函数获取所述视图中的视图布局参数;调用参数布局函数将所述视图布局参数设置在所述帧布局中形成新的帧布局。4.根据权利要求1所述的视图加载方法,其特征在于,所述方法还包括:当接收到所述目标视图的视图加载指令时,若所述目标视图为展示类型,解析出所述目标视图中的视图加载布局,并将所述视图加载布局中的可见性属性设置成可见视图属性,以使所述目标视图以可见形式加载;若所述目标视图为隐藏类型,解析出所述目标视图中的视图加载布局,并将所述视图加载布局中的可见性属性设置成隐藏视图属性,以使所述目标视图进行隐藏。5.根据权利要求1所述的视图加载方法,其特征在于,所述方法还包括:创建映射列表数组,并通过多个所述目标片段的哈希码将多个所述目标视图的视图加载添加至所述映射列表数组中;当获取到新的目标片段、且所述新的目标片段为展示加载类型时,通过所述新的目标片段的哈希码在所述映射列表数组查找是否存在与所述新的目标片段对应的目标视图的视图加载;若所述映射列表数组存在与所述新的目标片段对应的目标视图的视图加载,则直接调用所述对应的目标视图的视图加载对所述新的目标片段进行视图加载;若所述映射列表数组不存在与所述新的目标片段对应的目标视图的视图加载,则根据所述新的目标片段重新创建新的视图加载,并将所述新的视图加载添加到所述映射列表数组中。6.根据权利要求5所述的视图加载方法,其特征在于,所述方法还包括:当获取到新的目标片段、且所述新的目标片段为隐藏类型时,通过所述新的目标片段的哈希码在所述映射列表数组查找对应的视图加载,直接关闭所述视图加载以使所述新的目标片段隐藏。
7.一种视图加载系统,其特征在于,包括:获取模块,用于根据目标片段获取到对应的视图,并将所述视图从所述视图的父布局中移除,得到新的父布局;第一创建模块,用于创建帧布局,并获取所述视图中的视图布局参数,将所述视图布局参数设置在所述帧布局中形成新的帧布局;第二创建模块,用于通过布局服务创建视图加载布局,并根据所述视图加载布局获取加载布局视图;加载模块,用于将所述视图与所述加载布局视图添加至所述新的帧布局后,将所述新的帧布局设置到所述新的父布局中,形成目标视图以使用户根据所述目标视图进行视图加载。8.根据权利要求7所述的视图加载系统,其特征在于,所述获取模块包括:第一调用单元,用于调用父节点函数获取所述视图的父布局;第二调用单元,用于调用所述父布局的移除视图函数将所述视图从所述父布局中移除得到新的父布局。9.一种计算机,包括存储器和处理器,所述存储器中存储有计算机可读指令,其特征在于,所述计算机可读指令被所述处理器执行时,使得所述处理器执行如权利要求1至6中任一项所述的视图加载方法的步骤。10.一种可读存储介质,存储有计算机可读指令,其特征在于,所述计算机可读指令被处理器执行时实现如权利要求1至6中任一项所述的视图加载方法的步骤。
技术总结
本发明提供一种视图加载方法、系统、计算机及可读存储介质,方法包括:根据目标片段获取视图,并将视图从该视图的父布局中移除,得到新的父布局;创建帧布局,并获取视图中的视图布局参数,将视图布局参数设置在帧布局中形成新的帧布局;通过布局服务创建视图加载布局,并根据视图加载布局获取加载布局视图;将视图与加载布局视图添加至新的帧布局后,将新的帧布局设置到新的父布局中,形成目标视图以使用户根据目标视图进行视图加载。本发明通过创建帧布局,并在视图同级添加加载布局视图,使用户根据目标视图进行视图加载,完美解决一个页面中有多个片段的加载显示需求,从而不遮挡用户点击其他片段的操作。同时,本发明还涉及区块链技术。及区块链技术。及区块链技术。
技术研发人员:赵程
受保护的技术使用者:平安普惠企业管理有限公司
技术研发日:2022.02.18
技术公布日:2022/5/25
转载请注明原文地址:https://tc.8miu.com/read-9128.html