一种设备屏幕页面与子页面之间互相通信的方法及系统
技术领域
本发明涉及安卓的应用程序领域,具体涉及一种设备屏幕页面与子页面之间互相通信的方法及系统。
背景技术
安卓系统上的应用程序一般由各种页面及其中的子页面构成;通常,将显示在设备屏幕上的页面称之为Activity,将Activity上挂载的各种子页面称之为Fragment。
一个Activity可以挂载多个Fragment(例如参见图1所示,一个应用的频道浏览页面拥有新闻、财经和体育频道3个子页面),Fragment的运行内容与Activity没有直接关系,即Fragment与Activity为独立运行的,Activity可以称之为Fragment的容器。
因为安卓系统的面向对象特性,所以一个对象不能轻易访问另一个对象中的数据;因此,相对独立的频道浏览Activity无法轻易得知内部新闻Fragment加载了多少条新闻;新闻Fragment也无法轻易得知自己在频道浏览Activity排第几个位置。
在某些特殊场景下,Activity和Fragment必须要互相通信交换数据,互相通信交换数据的方式一般为:通过自行定义的调用程序使得Activity和Fragment互相得知对方的位置、并进行相应的修改(更新或删除)。
例如:参见图1所示,若频道浏览Activity想要命令新闻Fragment刷新列表,频道浏览Activity必须遍历内部已挂载的所有Fragment,找到新闻Fragment,再调用新闻Fragment内部的函数,刷新列表。
若新闻Fragment想要将其加载的新闻条数发送至频道浏览Activity、并让频道浏览Activity更新子页面标题为“新闻(5)”:Fragment首先需要调用系统函数找到频道浏览Activity、并得知自己在频道浏览Activity中排列的位置;然后调用频道浏览Activity内部的函数,更新子页面标题对应位置的文本。
上述调用函数的程序均由开发者自行编写,若Activity和Fragment之间通信次数较少(即只在一两处位置调用),操作过程还比较容易。但是,若Activity和Fragment之间通信次数较少(即在多处位置调用),则需要用到多个调用程序,其操作过程比较冗余繁琐,不便于人们使用。
发明内容
针对现有技术中存在的缺陷,本发明解决的技术问题为:在Activity和Fragment之间进行相互通信时,精简调用过程,进而达到简化操作过程,增加开发效率的目的。
为达到以上目的,本发明提供的设备屏幕页面与子页面之间互相通信的方法,该方法包括以下步骤:
Activity向Fragment通信时:
A01、Activity发送与Fragment通信的请求命令,与Fragment通信的请求命令中包括Fragment的tag、name和data;遍历Activity中挂载的所有Fragment,确定与tag对应的Fragment;
A02、与tag对应的Fragment得知Activity发送的name和data;
Fragment向Activity通信时:
B01、Fragment发送与Activity通信的请求命令,与Activity通信的请求命令中包括Activity的name和data;根据name和data确定当前Fragment需要通信的Activity;
B02、Activity得知当前Fragment发送的name和data。
在上述技术方案的基础上,步骤A01中所述遍历Activity中挂载的所有Fragment之后,还包括以下步骤:若未发现与tag对应的Fragment,则终止流程。
在上述技术方案的基础上,步骤B01中所述根据name和data确定当前Fragment需要通信的Activity时,还包括以下步骤:若未发现需要通信的Activity,则终止流程。
本发明提供的实现上述方法的设备屏幕页面与子页面之间互相通信的系统,该系统包括Activity端发送接口、Fragment端接收接口、Fragment端发送接口和Activity端接收接口;
在Activity向Fragment通信时:
Activity端发送接口用于:发送与Fragment通信的请求命令,与Fragment通信的请求命令中包括Fragment的tag、name和data;
与tag对应的Fragment端接收接口用于:得知Activity发送的name和data;
Fragment向Activity通信时:
Fragment端发送接口用于:发送与Activity通信的请求命令,与Activity通信的请求命令中包括Activity的name和data;
Activity端接收接口用于:得知当前Fragment发送的name和data。
在上述技术方案的基础上,该系统还包括Fragment遍历模块,其用于:当Activity端发送接口发送请求命令后,遍历Activity中挂载的所有Fragment,确定与tag对应的Fragment。
在上述技术方案的基础上,该系统还包括Activity查询模块,其用于:当Fragment端发送接口发送请求命令后,根据name和data确定当前Fragment需要通信的Activity。
与现有技术相比,本发明的优点在于:
本发明的系统为Activity端和Fragment端各定义了发送和接收2种接口,定义接口的Activity端和Fragment端进行通信时,只需要发送通信请求命令,即可自动遍历Activity确定Fragment、或者自动确定Fragment的容器Activity。
有鉴于此,与现有技术中需要多次调用系统函数的通信方法相比,本发明能够通过Activity端和Fragment端定义的4种接口(Activity端的发送接收2种,Fragment端的发送接收2种),即可完成Activity和Fragment之间的相互通信,其调用程序较少,显著的精简了调用过程,进而简化了操作过程,增加了开发效率,便于人们使用。
附图说明
图1为现有技术中包含多个Fragment的Activity的示意图。
具体实施方式
以下结合附图及实施例对本发明作进一步详细说明。
本发明实施例中的设备屏幕页面与子页面之间互相通信的方法,包括以下步骤:
Activity向Fragment通信时:
A01、Activity发送与Fragment通信的请求命令,与Fragment通信的请求命令中包括Fragment的tag(标签)、name(通信命令名称)和data(通信命令参数)。
自动遍历Activity中挂载的所有Fragment,确定与tag对应的Fragment(若未发现与tag对应的Fragment,则终止流程)。
A02、与tag对应的Fragment得知Activity发送的name和data,实现消息传达。
下面以具体应用程序的方式说明Activity向Fragment通信时的流程:
Activity端发送:
public void sendDataToFragment(String tag,String name,Objectdata);
Fragment端接收:
protected void onReceiveDataFromActivity(String name,Objectdata);
在Activity端执行命令sendDataToFragment,传入目标Fragment的tag、name和data,代码将自动寻找目标Fragment,自动调用Fragment里的onReceiveDataFromActivity回调。
由此可见,使用本发明的方法的Activity向Fragment通信时,开发者只需监听onReceiveDataFromActivity回调即可接受来自Activity的通信。
Fragment向Activity通信时:
B01、Fragment发送与Activity通信的请求命令,与Activity通信的请求命令中包括Activity的name和data。根据name和data自动确定当前Fragment需要通信的Activity(若未发现Activity,则终止流程)。
B02、Activity得知当前Fragment发送的name和data,实现消息传达。
下面以具体应用程序的方式说明Fragment向Activity通信时的流程:
Fragment端发送:
public void sendDataToActivity(String name,Object data);
Activity端接收:
protected void onReceiveDataFromFragment(String tag,Stringname,Object data);
在Fragment端执行命令sendDataToActivity,传入name和data,代码将自动寻找容器Activity,自动调用Activity里的onReceiveDataFromFragment回调。
由此可见,使用本发明的方法的Fragment向Activity通信时,开发者只需监听onReceiveDataFromFragment回调即可接受来自Fragment的通信。
本发明实施例中的实现上述方法的设备屏幕页面与子页面之间互相通信的系统,该系统包括Activity端发送接口、Fragment遍历模块、Fragment端接收接口、Fragment端发送接口、Activity查询模块和Activity端接收接口。
在Activity向Fragment通信时:
Activity端发送接口用于:发送与Fragment通信的请求命令,与Fragment通信的请求命令中包括Fragment的tag、name和data。
Fragment遍历模块用于:遍历Activity中挂载的所有Fragment,确定与tag对应的Fragment。
与tag对应的Fragment端接收接口用于:得知Activity发送的name和data。
下面以具体应用程序的方式说明本发明的设备屏幕页面与子页面之间互相通信的系统,在Activity向Fragment通信时的流程:
Activity端发送接口执行命令sendDataToFragment,传入目标Fragment的tag、name和data,Fragment遍历模块将自动寻找目标Fragment,目标Fragment端接收接口自动调用Fragment里的onReceiveDataFromActivity回调。
Fragment向Activity通信时:
Fragment端发送接口用于:发送与Activity通信的请求命令,与Activity通信的请求命令中包括Activity的name和data。
Activity查询模块用于:根据name和data确定当前Fragment需要通信的Activity。
Activity端接收接口用于:得知当前Fragment发送的name和data。
下面以具体应用程序的方式说明本发明实施例中的设备屏幕页面与子页面之间互相通信的系统,在Fragment向Activity通信时的流程:
Fragment端发送接口执行命令sendDataToActivity,传入name和data,Activity查询模块自动寻找容器Activity,Activity端接收接口调用Activity里的onReceiveDataFromFragment回调。
本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。