一种Fragment中控件识别方法及系统与流程

文档序号:15980629发布日期:2018-11-17 00:17阅读:255来源:国知局

本发明实施例涉及计算机技术领域,尤其涉及一种fragment中控件识别方法及系统。

背景技术

目前,在android系统的软件开发过程中,用户界面的切换全部使用activity的切换,这就造成了整个应用使用起来速度较慢,而且很占内存,因为activity是重量级的组件,在应用程序内部使用很不方便。针对上述情形,android3.0中引入fragment的概念,fragment可翻译为片段,fragment是一个具有自己生命周期的控件,它有自己的处理输入事件的能力,有自己的生命周期,又必须依赖于activity,能互相通信和托管。通过fragment可以解决不同屏幕分辩率的动态和灵活ui设计,大屏幕如平板电脑、小屏幕如手机均可使用,平板电脑通过fragment的设计使得其有更多的空间来放更多的ui组件,而多出来的空间存放ui使其会产生更多的交互。

但是现有技术中,都只是利用fragment进行页面与逻辑开发,而fragment内部的控件由于依附在activity中,所以并没有很好的方法进行监听并识别,从而造成用户数据采集的困难。

因此现在亟需一种fragment控件识别方法来对fragment内部的控件进行监听并识别。



技术实现要素:

为了解决上述问题,本发明实施例提供一种克服上述问题或者至少部分地解决上述问题的fragment中控件识别方法及系统。

第一方面本发明实施例提供一种fragment中控件识别方法,包括:

在activity组件的生命周期中,监听所述activity组件中的fragment;

在所述fragment的生命周期中,获取所述fragment中的控件、所述fragment的名称以及所述fragment的类型;

将所述fragment的名称作为所述fragment中的控件的标识信息植入到所述fragment中的控件中,并基于所述fragment的类型确定所述fragment的类型对应的识别方式,以根据所述识别方式和所述标识信息对所述fragment中的控件识别。

第二方面本发明实施例提供了一种fragment中控件识别系统,所述系统包括:

监听模块,用于在activity组件的生命周期中,监听所述activity组件中的fragment;

获取模块,用于在所述fragment的生命周期中,获取所述fragment中的控件、所述fragment的名称以及所述fragment的类型;

识别模块,用于将所述fragment的名称作为所述fragment中的控件的标识信息植入到所述fragment中的控件中,并基于所述fragment的类型确定所述fragment的类型对应的识别方式,以根据所述识别方式和所述标识信息对所述fragment中的控件识别。

第三方面本发明实施例提供了一种fragment中控件识别设备,包括:

处理器、存储器、通信接口和总线;其中,所述处理器、存储器、通信接口通过所述总线完成相互间的通信;所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行上述所述的一种fragment中控件识别方法。

第四方面本发明实施例提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行上述方法。

本发明实施例提供的一种fragment中控件识别方法及系统,通过获取fragment内的控件、fragment的类型以及fragment的名称,实现针对不同fragment的类型的不同fragment内控件识别,识别过程准确高效且代码量小。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例提供的一种fragment中控件识别方法流程图;

图2是本发明实施例提供的一种fragment中控件识别系统结构示意图;

图3是本发明实施例提供的一种fragment中控件识别设备的结构框图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

现有技术中,在android开发过程中,为了更加灵活和动态的ui设计,引入了fragment的概念。fragment用于表示activity组件中的行为或用户界面部分,可以将多个fragment组合在一个activity组件中构建多窗格ui,也可以在多个activity组件中重复使用某一个fragment。

但是现有技术都只是在利用fragment来完成某些功能的开发,而fragment内部的空间,由于依附在activity组件中,所以未能得到很好的监听,从而在数据采集过程中造成一些不必要的困难。

针对上述现有技术中存在的问题,图1是本发明实施例提供的一种fragment中控件识别方法流程图,如图1所示,包括:

s1、在activity组件的生命周期中,监听所述activity组件中的fragment;

s2、在所述fragment的生命周期中,获取所述fragment中的控件、所述fragment的名称以及所述fragment的类型;

s3、将所述fragment的名称作为所述fragment中的控件的标识信息植入到所述fragment中的控件中,并基于所述fragment的类型确定所述fragment的类型对应的识别方式,以根据所述识别方式和所述标识信息对所述fragment中的控件识别。

在步骤s1中,所述activity组件是android系统中最为基本也是最为常见的四大组件之一,主要用于为android系统提供一个屏幕页面,用户能够通过该屏幕页面进行交互。需要说明的是,在activity组件提供的屏幕页面中包含了一个或多个fragment以及在fragment中显示出来的控件,这些控件在本发明实施例中一般指代为view类控件,这些显示出来的控件需要进行识别才可以判断其究竟属于哪一个fragment。

进一步的,可以理解的是,activity组件具有自身的生命周期,activity组件通过生命周期的方法来管理的自己的创建与销毁。一般一个生命周期需要经过从创建,运行,停止,销毁等正常的生命周期过程,故而本发明实施例需要在整个activity组件的生命周期中对activity组件中的fragment进行监听,从而确定activity组件中每个fragment的具体信息。

在步骤s2中,同样的,fragment也具有自己的生命周期,fragment的生命周期类似于activity组件的生命周期,也需要经过从创建,运行,停止,销毁等正常的生命周期过程。并且,因为fragment代表activity组件在工作,它的状态应该也反应了activity的状态。因而,fragment需要对应的生命周期方法来处理activity的工作。那么在fragment的生命周期内,为了获取fragment中每个工作的view控件的控件信息,本发明实施例同样需要在fragment的生命周期内对fragment中每个工作的view控件进行监听,从而获取相应的fragment的控件信息、所述fragment的名称以及所述fragment的类型。

可以理解的是,fragment的类型一般可分为动态fragment和静态fragment,而不同类型的fragment其实现方式不同,例如动态fragment中,view控件是动态的放入页面的,而静态fragment中,view控件是直接显示在页面上,故而针对不同的fragment的类型,本发明实施例需要采取不同的识别策略,才能有针对性的实现各种类型fragment中控件的识别。

在步骤s3中,可以理解的是,通过步骤s1和步骤s2的监听过程,本发明实施例能够获取每个fragment中控件对应的fragment名称,本发明实施例可以将fragment名称作为标识信息植入到fragment中的控件中,从而在进行识别时,直接检测标识信息就可识别出fragment中任一控件所属的fragment。

进一步的,本发明实施例还针对不同类型的fragment制定相应的识别方式,然后在进行识别时采用与类型相对应的识别方式进行识别,从而实现fragment中控件的全方位识别。

本发明实施例提供的一种fragment中控件识别方法,通过获取fragment内的控件、fragment的类型以及fragment的名称,实现针对不同fragment的类型的不同fragment内控件识别,识别过程准确高效且代码量小。

在上述实施例的基础上,所述在activity组件的生命周期中,监听属于所述activity组件的fragment,包括:

通过第一目标方法检测是否存在fragmentactivity,所述第一目标方法是在所述activity组件的生命周期中实现的方法;

若存在fragmentactivity,则对所述fragmentactivity对应的fragment进行注册,以监听属于所述activity组件的fragment。

由上述实施例的内容可知,本发明实施例在步骤s1中对activity组件的fragment进行了监听,从而在整个activity组件的生命周期中持续获取fragment的变化信息,那么具体的监听过程,本发明实施例采用了第一目标方法判断的方式。

在本发明实施例中,第一目标方法指代为onactivitycreated方法,可以理解的是,在activity组件的生命周期中会实现很多方法,其中便包括onactivitycreated方法,该方法会在activity中的oncreate方法执行完后调用,也就是说当执行onactivitycreated方法的时候activity的oncreate才刚刚完成,此时相当于activity组件构建的初始化阶段,在初始化阶段中,通过检测onactivitycreated方法中是否调用了fragmentactivity,就可以判断activity组件中是否嵌入了fragment。

本发明实施例只针对于activity组件中嵌入了fragment的情况,那么相应的,系统会检测到第一目标方法中存在fragmentactivity,那么此时本发明实施例会对fragmentactivity对应的fragment的生命周期进行注册,从而完成对activity组件中嵌入的fragment进行监听。

需要说明的是,本发明实施例所提供的onactivitycreated方法作为第一目标方法进行监听fragment只是本发明实施例提供的一种具体实施方式,其他同样能够实现监听fragment功能的方法均可作为本发明实施例所述的第一目标方法,对此本发明实施例不做具体限定。

在上述实施例的基础上,所述在所述fragment的生命周期中,获取所述fragment中的控件、所述fragment的名称以及所述fragment的类型,包括:

通过第二目标方法获取执行所述第二目标方法的fragment中的控件、执行所述第二目标方法的fragment的名称以及执行所述第二目标方法的fragment的类型,其中,所述第二目标方法是在所述fragment的生命周期中实现的方法。

由上述实施例的内容可知,本发明实施例在fragment的生命周期内获取了fragment的控件、fragment的名称以及fragment的类型,具体的,本发明实施例是采用了对第二目标方法监听的方式进行获取的。

其中,在本发明实施例中,第二目标方法指代为fragment中的onfragmentviewcreated方法,可以理解的是,在fragment的生命周期中会实现很多方法,其中便包括onfragmentviewcreated方法,该方法会在oncreateview方法执行完后立即执行,通过该方法能够返回当前fragment要显示的view控件信息,那么从view控件信息中,本发明实施例能够获取到fragment的控件、fragment的名称以及fragment的类型。

需要说明的是,本发明实施例所提供的onfragmentviewcreated方法作为第二目标方法进行fragment的控件、fragment的名称以及fragment的获取只是本发明实施例提供的一种具体实施方式,其他同样能够实现fragment的控件、fragment的名称以及fragment的获取功能的方法均可作为本发明实施例所述的第二目标方法,对此本发明实施例不做具体限定。

在上述实施例的基础上,所述将所述fragment的名称作为所述fragment的控件的标识信息植入到所述fragment的控件中,包括:

遍历所有fragment中的控件,若所述fragment中的控件为view类,则将所述fragment中的控件对应的所述fragment名称作为所述fragment中的控件的标识信息植入所述fragment中的控件中。

由上述实施例可知,本发明实施例能够获取到fragment的名称以及fragment中控件的控件信息,那么需要对控件进行标识信息植入才能完成识别过程,针对上述情形,本发明实施例提供了一种标识信息植入的方式。

具体的,由于每一个控件均会和一个fragment名称对应,那么本发明实施例将对所有控件进行遍历,然后为每一个控件打上tag,即植入其对应的标识信息。

需要说明的是,在遍历过程中,由于有些控件所属的类是viewgroup,每个viewgroup都包括了多个view类,那么本发明实施例提供的遍历过程需要针对于每个view类,知道系统组件中的最后view类为止。

本发明实施例提供的遍历控件并为每一个控件打tag的标识信息植入方式简洁高效,可以更好的实现控件所属的fragment的识别。

在上述实施例的基础上,所述基于所述fragment的类型确定所述fragment的类型对应的识别方式,以根据所述识别方式和所述标识信息对所述fragment中的控件识别,包括:

若判断获知所述fragment的类型是动态fragment,则将植入后的所述fragment中的控件添加进所述activity组件的控件中,以在所述activity组件中根据所述标识信息对所述fragment中的控件识别。

由上述实施例的内容可知,本发明实施例会针对不同类型的fragment制定不同的识别方式进行识别,一般的,可以将fragment的类型分为动态fragment和静态fragment,针对于动态fragment的识别方式,本发明实施例提供了一种activity组件页面植入的方式。

具体的,由于在动态fragment中,view控件是动态的放入页面的,所以为了能够识别这个view控件,就需要将这个view加入到activity的view控件中,然后再在activity的view控件中进行控件的遍历,从而在activity组件中根据view控件中植入的标识信息对所述fragment的控件识别。

本发明实施例提供了一种动态fragment中控件的识别方式,识别过程所实现的内部逻辑对代码的原有影响可以忽略不计,不会对系统的整体性能造成影响。

在上述实施例的基础上,所述基于所述fragment的类型确定所述fragment的类型对应的识别方式,以根据所述识别方式和所述标识信息对所述fragment中的控件识别,包括:

若判断获知所述fragment的类型是静态fragment,则将所述fragment的名称作为所述fragment中的控件的标识信息植入到所述fragment中的控件中,以根据所述标识信息对所述fragment中的控件识别。

由上述实施例的内容可知,本发明实施例会针对不同类型的fragment制定不同的识别方式进行识别,一般的,可以将fragment的类型分为动态fragment和静态fragment,针对于静态fragment的识别方式,本发明实施例提供了一种页面直接识别的方式。

具体的,由于在静态fragment中,fragment的view控件会直接显示在页面上且不发生变化,那么本发明实施例可以直接获取静态fragment中view控件的标识信息,以根据标识信息对view控件进行识别。

本发明实施例提供了一种静态fragment中控件的识别方式,识别过程所实现的内部逻辑同样对代码的原有影响可以忽略不计,不会对系统的整体性能造成影响。

图2是本发明实施例提供的一种fragment中控件识别系统结构图,如图2所示,所述系统包括:监听模块1、获取模块2以及识别模块3,其中:

监听模块1用于在activity组件的生命周期中,监听所述activity组件中的fragment;

获取模块2用于在所述fragment的生命周期中,获取所述fragment中的控件、所述fragment的名称以及所述fragment的类型;

识别模块3用于将所述fragment的名称作为所述fragment中的控件的标识信息植入到所述fragment中的控件中,并基于所述fragment的类型确定所述fragment的类型对应的识别方式,以根据所述识别方式和所述标识信息对所述fragment中的控件识别。

具体的如何通过监听模块1、获取模块2以及识别模块3对fragment中控件识别可用于执行图1所示的fragment中控件识别方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。

本发明实施例提供的一种fragment中控件识别系统,通过获取fragment内的控件、fragment的类型以及fragment的名称,实现针对不同fragment的类型的不同fragment内控件识别,识别过程准确高效且代码量小。

本发明实施例提供一种fragment中控件识别设备,包括:至少一个处理器;以及与所述处理器通信连接的至少一个存储器,其中:

图3是本发明实施例提供的fragment中控件识别设备的结构框图,参照图3,所述fragment中控件识别设备,包括:处理器(processor)310、通信接口(communicationsinterface)320、存储器(memory)330和总线340,其中,处理器310,通信接口320,存储器330通过总线340完成相互间的通信。处理器310可以调用存储器330中的逻辑指令,以执行如下方法:在activity组件的生命周期中,监听所述activity组件中的fragment;在所述fragment的生命周期中,获取所述fragment中的控件、所述fragment的名称以及所述fragment的类型;将所述fragment的名称作为所述fragment中的控件的标识信息植入到所述fragment中的控件中,并基于所述fragment的类型确定所述fragment的类型对应的识别方式,以根据所述识别方式和所述标识信息对所述fragment中的控件识别。

本发明实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法,例如包括:在activity组件的生命周期中,监听所述activity组件中的fragment;在所述fragment的生命周期中,获取所述fragment中的控件、所述fragment的名称以及所述fragment的类型;将所述fragment的名称作为所述fragment中的控件的标识信息植入到所述fragment中的控件中,并基于所述fragment的类型确定所述fragment的类型对应的识别方式,以根据所述识别方式和所述标识信息对所述fragment中的控件识别。

本发明实施例提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行上述各方法实施例所提供的方法,例如包括:在activity组件的生命周期中,监听所述activity组件中的fragment;在所述fragment的生命周期中,获取所述fragment中的控件、所述fragment的名称以及所述fragment的类型;将所述fragment的名称作为所述fragment中的控件的标识信息植入到所述fragment中的控件中,并基于所述fragment的类型确定所述fragment的类型对应的识别方式,以根据所述识别方式和所述标识信息对所述fragment中的控件识别。

本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1