CN116954790A - 一种Android平台的单Activity页面架构方法 - Google Patents
一种Android平台的单Activity页面架构方法 Download PDFInfo
- Publication number
- CN116954790A CN116954790A CN202310672705.7A CN202310672705A CN116954790A CN 116954790 A CN116954790 A CN 116954790A CN 202310672705 A CN202310672705 A CN 202310672705A CN 116954790 A CN116954790 A CN 116954790A
- Authority
- CN
- China
- Prior art keywords
- page
- fragmentui
- calling
- current
- activity
- 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
- 238000000034 method Methods 0.000 title claims abstract description 110
- 230000000694 effects Effects 0.000 claims abstract description 64
- 230000003993 interaction Effects 0.000 claims abstract description 7
- 238000012546 transfer Methods 0.000 claims abstract description 7
- 230000009191 jumping Effects 0.000 claims abstract description 6
- 239000012634 fragment Substances 0.000 claims description 32
- 238000012545 processing Methods 0.000 claims description 10
- 230000004044 response Effects 0.000 claims description 7
- 230000008569 process Effects 0.000 claims description 3
- 230000009286 beneficial effect Effects 0.000 abstract description 3
- 230000006978 adaptation Effects 0.000 description 5
- 235000008694 Humulus lupulus Nutrition 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 230000007547 defect Effects 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000018109 developmental process Effects 0.000 description 2
- 230000007704 transition Effects 0.000 description 2
- 230000000903 blocking effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012827 research and development Methods 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
Classifications
-
- 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
-
- 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
- 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/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
- G06F9/4484—Executing subprograms
-
- 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
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)
- Processing Or Creating Images (AREA)
Abstract
一种Android平台的单Activity页面架构方法,基于自定义FragmentUI架构单Activity页面,包括:FragmentUI创建和生命周期管理,根据页面不同时期的状态提供不同的生命周期,支持响应用户交互行为,支持不同的页面跳转方式,支持不同状态下的页面传递数据;基类Activity关联FragmentUI的生命周期,将基类Activity作为FragmentUI的容器;创建FragmentUI管理类,处理不同FragmentUI之间的页面跳转,以及提供页面管理操作。本发明可快速搭建一个单Activity应用,并达到易于使用、可定制、可扩展生命周期的目的,更利于后续功能的扩展和定制。
Description
技术领域
本发明涉及页面架构技术领域,尤其涉及一种Android平台的单Activity页面架构方法。
背景技术
在APP开发过程中,通常都会采用Activity作为业务逻辑分割或者场景转换的中介;但是随着业务量的增加,应用卡顿、Activity堆栈不方便管理等弊端慢慢显现出来。而Fragment相对于Activity占用的资源更少,特别是在低端设备上表现更为明显,其次因为Fragment是一个个碎片,每个场景都有自己的生命周期和状态,比Activity要更为灵活,所以单Activity+多Fragment框架也就应运而生。但是Fragment也有自己的弊端,Fragment的创建和使用相比Activity更加繁琐,堆栈管理、动画、关闭等操作也不方便。Google也是考虑上述Fragment缺点,提供了Navigation组件作为管理Fragment的容器,虽然一定程度上解决了页面跳转、跳转动画问题,但是堆栈管理并不方便,Fragment生命周期没办法扩展,也不利于后续功能扩展和开发。
发明内容
本发明的目的是克服上述现有技术的缺点,提供一种页面开启/关闭方便、生命周期可扩展、支持不同的转场动画、页面管理方案易于使用、简单易用且可快速搭建的Android平台的单Activity页面架构方法。
本发明是通过以下技术方案来实现的:
一种Android平台的单Activity页面架构方法,创建自定义FragmentUI,利用所述FragmentUI架构单Activity页面,包括:
FragmentUI创建和生命周期管理:自定义FragmentUI提供了一种自定义扩展生命周期的工具框架,利用所述FragmentUI中的工具可根据页面不同时期的状态提供不同的生命周期,支持响应用户交互行为,支持不同的页面跳转方式,支持不同状态下的页面传递数据;
基类Activity关联FragmentUI的生命周期:创建一个基类Activity,将其作为FragmentUI的容器,并通过在Activity的每个生命周期的方法内调用对应FragmentUI的生命周期,达到关联生命周期的目的;
创建FragmentUI管理类,使FragmentUI与FragmentUI管理类之间形成关联,所述FragmentUI管理类用于处理不同FragmentUI之间的页面跳转,以及提供页面管理操作。
进一步地,所述根据页面不同时期的状态提供不同的生命周期的方法包括:
onAttach(Activity activity):通过调用onAttach(Activity activity)建立FragmentUI与Activity之间的关联;
onCreate(Bundle saveInstanceState):通过调用onCreate(BundlesaveInstanceState)创建FragmentUI实例;
onCreateView(LayoutInflater inflater,ViewGroup container,BundleavedInstanceState):通过调用onCreateView(LayoutInflater inflater,ViewGroupcontainer,Bundle avedInstanceState)创建FragmentUI页面视图;
onStart():通过调用onStart()使页面可见;
onResume():通过调用onResume()使页面获取焦点;
onPause():通过调用onPause()使页面不可见并失去焦点;
onStop():通过调用onStop()使页面即将不可见;
onFragmentUIChange():通过调用onFragmentUIChange()切换至下一个页面,并紧跟在前一个页面的onStop()调用之后;
onDestoryView():通过调用onDestoryView()使页面与当前Activity取消关联即将销毁;
onDestory():通过调用onDestory()使页面不再使用即将被销毁;
onLoadData(Bundle bundle):使页面数据刷新的方法。
进一步地,所述支持响应用户交互行为的方法包括:
dispatchTouchEvent(MotionEvent ev):通过调用dispatchTouchEvent(MotionEvent ev)响应用户的触摸事件行为;
dispatchKeyEvent(KeyEvent event):通过调用dispatchKeyEvent(KeyEventevent)响应用户的按键事件;
onConfigurationChanged(Configuration newConfig):通过调用onConfigurationChanged(Configuration newConfig)响应***配置变更,如横竖屏切换;
onBackPressed():通过调用onBackPressed()响应用户手机回退事件;
onActivityResult(int requestCode,int resultCode,Intent data):通过调用onActivityResult(int requestCode,int resultCode,Intent data)响应***请求行为或者请求其他Activity数据返回;
onActivityResult(int requestCode,int resultCode,Bundle bundle):通过调用onActivityResult(int requestCode,int resultCode,Bundle bundle)获取其他页面返回的数据。
进一步地,所述支持不同状态下的页面传递数据的方法包括:
跳转其他页面时,在调用startFragment中使用bundle携带需要传递的数据信息,目标对象通过调用onCreate(Bundle bundle)获取携带的数据信息;
页面关闭时,在调用backFragment中使用bundle携带需要传递的数据信息,返回对象通过调用onActivityResult(int requestCode,int resultCode,Bundle bundle)获取携带的数据信息。
进一步地,所述FragmentUI管理类用于处理不同FragmentUI之间的页面跳转的方法,包括:通过调用startFragment(Class<?extends FragmentUI>fragment,Bundlebundle,int animId,FragmentUI curUI,boolean releaseCur)启动新的页面,其中,fragment表示目标对象,bundle携带的参数可以为null,animid表示动画类型,releaseCur表示是否释放当前页面。
进一步地,所述FragmentUI管理类启动新页面的方法为:
A01、判断是否是当前FragmentUI发起的跳转,如不是则不处理;
A02、如果正在执行跳转动画又作了跳转操作,调用preHandle()中止之前的跳转动画;
A03、获取当前FragmentUI的栈帧信息并调用当前FragmentUI的onPause()方法;
A04、调用目标FragmentUI的onAttach()、setArguments(bundle)、onCreate()、prepareView()并通过调用addView()将view加到容器内;
A05、调用当前FragmentUI的onStop()和onFragmentUIChange()方法;
A06、判断是否释放当前FragmentUI,如需释放的话调用当前FragmentUI的onDestroyView()和onDestroy()并通过stack.remove(cur)方法将当前FragmentUI从堆栈中移除,再执行A07步骤;如无需释放当前FragmentUI,则执行A07步骤;
A07、调用目标FragmentUI的onStart()和onResume()方法并通过stack.push(target)方法将目标FragmentUI加入到堆栈中;
A08、通过addAnimation添加动画,调用startAnim()方法启动动画,等待动画结束;
A09、判断是否释放当前view,如需释放则调用removeView()将需要移除的view从容器中移除,页面跳转结束;如无需释放,通过setVisibility(View.INVISIBLE)使当前view不可见(隐藏),页面跳转结束。
进一步地,所述FragmentUI管理类用于处理不同FragmentUI之间的页面跳转的方法,还包括:
通过调用backFragment(int animId,Bundle bundle,FragmentUI curUI)返回到前一个页面或前面某个特定页面,具体跳转实现由堆栈统一调度;其中,animid表示动画类型,bundle携带的参数可以为null。
进一步地,所述FragmentUI管理类回退到上一个页面或者某个特定页面,其方法为:
B01、判断是否是当前FragmentUI发起的跳转,如不是则不处理;
B02、如果正在执行跳转动画又作了跳转操作,通过preHandle()中止之前的跳转动画,通过stack.pop()使当前页面出栈,通过stack.peek()获取到前一个页面;
B03、判断是否跳转到特定页面,如果是,则执行遍历查找方法直至找到对应的页面并释放中间页面数据,再执行B04至B08步骤;如否,则依次执行B04至B08步骤;
B04、获取当前FragmentUI的栈帧信息并调用当前前FragmentUI的onPause()和onStop()方法;
B05、获取栈内的前一个FragmentUI并通过View.setVisibility()使前一页面view显示;
B06、调用前一个FragmentUI的onActivityResult()和onResume()方法;
B07、调用当前FragmentUI的onDestoryView()和onDestory()方法;
B08、通过addAnimation添加动画,调用startAnim()方法启动动画,等待动画结束,通过removeView()将当前view从容器中移除,页面跳转结束。
进一步地,所述遍历查找方法为:
B031、依次调用前一个页面的onStop()、onDestroyView()和onDestroy()方法;
B032、通过stack.pop()将前一个页面从堆栈中移除,通过removeView()从容器中移除前一个页面view;
B033、通过stack.peek()获取到前一个页面,判断是否为对应的目标页面,如是,完成遍历查找;如否,继续执行B031至B033直至找到对应的目标页面。
进一步地,所述FragmentUI管理类提供页面管理操作的方法,主要包括:
C01、获取当前栈内页面数量;
C02、获取当前栈顶页面;
C03、通过index移除某个页面;
C04、启动新的页面;
C05、回退前面某个页面;
C06、移除栈内所有页面。
本发明通过自定义FragmentUI,实现页面跳转以及动画关联方案、堆栈管理方案,能够快速搭建一个单Activity应用,并达到易于使用、可定制、可扩展生命周期的目的,更利于后续功能的扩展和定制。如一些需要在Android Pad上做横竖屏适配的应用、或者需要同时显示好友列表页和聊天页场景的im类应用,使用传统的技术方案基本很难实现,但是使用本框架创建多个任务堆栈和扩展生命周期,就可以达到很好的适配效果。
附图说明
图1为本发明实施例中FragmentUI的生命周期。
图2为本发明实施例中FragmentUI管理类启动新页面的流程图。
图3为本发明实施例中FragmentUI管理类回退到上一个页面或者某个特定页面的流程图。
具体实施方式
Activity:Android组件中最基本也是最为常见的组件,提供一个窗体或者屏幕,用户可以用来进行交互以完成某项任务。
Fragment:Android3.0提出的,最开始是为了适配大屏的平板,跟Activity一样拥有自己的界面,但Fragment必须要依赖Activity不能独立存在,每个Fragment独有自己独立的生命周期,可以在Activity的运行时进行动态的添加和删除。
Android***虽然也提供了一套Fragment,但相较于Activity来说要难用的多,且缺少转场动画,Fragment之间的数据传递也比较麻烦,Fragment的生命周期也不方便管理,对于一些特殊使用场景比如pad的左右分屏就没办法很好地支持。因此本发明摒弃掉***的Fragment自己来维护一套全新的自定义的Fragment,这里称之为FragmentUI,自己定义的Fragment具备***Fragment的基本特性并且更加利于管理和扩展,自定义FragmentUI为一种全新的框架,框架内提供了不同的适用方法,使用者可以在调用这些方法的基础上进行自由定制、扩展和管理。
本发明一种Android平台的单Activity页面架构方法,通过创建自定义FragmentUI,利用所述FragmentUI架构单Activity页面,主要包括以下内容:FragmentUI创建和生命周期管理,基类Activity关联FragmentUI的生命周期,创建FragmentUI管理类。下面分别进行阐述。
一、FragmentUI创建和生命周期管理
创建自定义FragmentUI,使自定义FragmentUI具有以下功能:
(1)根据页面不同时期的状态提供不同的生命周期,可根据业务自行扩展;
(2)支持响应用户交互行为;
(3)支持不同的页面跳转方式;
(4)易于使用的页面传递数据方式,支持不同状态下的页面传递数据。
FragmentUI的生命周期具体见图1,所述根据页面不同时期的状态提供不同的生命周期的方法包括:
onAttach(Activity activity):通过调用onAttach(Activity activity)建立FragmentUI与Activity之间的关联;
onCreate(Bundle saveInstanceState):通过调用onCreate(BundlesaveInstanceState)创建FragmentUI实例;
onCreateView(LayoutInflater inflater,ViewGroup container,BundleavedInstanceState):通过调用onCreateView(LayoutInflater inflater,ViewGroupcontainer,Bundle avedInstanceState)创建FragmentUI页面视图;
onStart():通过调用onStart()使页面可见;
onResume():通过调用onResume()使页面获取焦点;
onPause():通过调用onPause()使页面失去焦点;
onStop():通过调用onStop()使页面即将不可见;
onFragmentUIChange():通过调用onFragmentUIChange()切换至下一个页面,并紧跟在前一个页面的onStop()调用之后;
onDestoryView():通过调用onDestoryView()使页面与当前Activity取消关联即将销毁;
onDestory():通过调用onDestory()使页面不再使用即将被销毁;
onLoadData(Bundle bundle):通过调用onLoadData(Bundle bundle)实现页面数据的刷新。如在横屏适配的时候往往会左边放置列表,右边设置详情页,用户由列表A项再切换到列表B项,切换时需要刷新详情页,传统的Fragment没办法扩展生命周期,很难实现这样的业务,该方法即可用于这种详情页需要刷新数据的场景。
本发明的自定义FragmentUI作为一个应用框架,提供了多种可调用的工具和方法,因而可实现自由定制和扩展页面的生命周期,各功能的具体实现方案需要根据不同的业务场景来进行自由定制。下面的FragmentUI自定义扩展功能进行举例说明。
正如前文提到的,用户在实际使用过程中会遇到一些特殊的场景:
场景一:当某套程序既要适配手机设备,又要适配平板设备时,由于平板的尺寸比手机的要大很多,且尺寸比例也不相同,难以按照手机的效果在平板上进行展示,目前大部分主流应用在手机和平板上的页面展示方式都是在页面顶部的导航栏加上中间列表展示加上底部导航栏,新开页面都是在当前页面的基础上跳转的,这种展示方式对于手机来说是合理的,但对于平板来说,则浪费了平板的有效空间,特别是当平板横屏时,展示的区域比例就很不合理。
如何充分和合理地利用平板的屏幕空间,在平板上有效进行页面的展示?针对该场景,本发明的解决方案是:
将平板的屏幕分为左右两块区域,左边区域还是保留原有手机展示的效果,用于展示列表,右边区域展示新开页面效果,用户需要新开页面的时候都在右边区域进行展示,这样可以最大限度的利用屏幕空间,改动也会相对而言较少。
为了达到上述技术效果,采取如下技术手段:
1.首先判断当前运行在平板上还是手机上,可以通过分辨率进行区分;
2.由于设备上展示的画面其实就是一层层纹理叠加的效果,针对手机和平板的不同展示,先构建一个容器,这个容器包括左右两块区域,左边展示原有页面效果,右边展示新开页面,针对手机,让右边的内容区不展示,然后在容器上叠加页面,这样可以达到正常展示的效果;针对平板,需要区分左边区域和右边区域,左边区域是常在页面,显示原有的主页效果,右边区域作为新开页面展示区域,新打开的页面都在右边区域展示,具体反映到生命周期上就是addView的容器不同,可以新增方法将容器设置到管理类里面。
上面的方法虽然可以处理手机和平板展示的效果,但是正常应用的底部会有多个导航来实现内容页的切换,需要一个导航一个堆栈来管理页面跳转(堆栈就相当于一个容器,打开一个页面就相当于往容器里面增加Fragment,关闭一个页面就从容器里面取出一个Fragment),现有的Android技术方案难以实现,目前的Android技术方案基本都是通过一个堆栈进行管理。现有的框架也都是基于一个堆栈进行管理的方式,这对于大部分场景是适用的,但是对于一些诸如上面提到的场景是没办法实现的,难以扩展出多个堆栈来实现。
而基于本发明的自定义FragmentUI框架,可以扩展出多个堆栈,采用多堆栈的方式管理不同导航的页面情况,针对左边区域创建一个堆栈进行整体管理;针对右边区域,每新开一个导航都新创建一个堆栈进行管理,在不同的导航里开的页面由不同的容器进行管理,导航切换的时候通知管理类进行容器的切换,根据不同的容器打开和关闭不同的页面。本发明的FragmentUI框架,可以轻松实现多个堆栈的扩展,有利于页面切换管理。
场景二:目前主流厂商的折叠屏手机产品可谓百花齐放,尺寸规格等各不相同,没有统一的标准,因而针对折叠屏的应用适配目前都是靠厂商推动,应用开发者并没有对此进行深入研究开发。针对于折叠屏的适配,也可以采用上述场景一的方案,合屏的情况下使用手机主页的展示方式,分屏的情况下可以采用平板的左右分区域展示的方式,并基于本发明的本发明的自定义FragmentUI框架,采用多堆栈的方式来实现。
为了响应用户之间交互,FragmentUI主要提供了下面这些方法:
dispatchTouchEvent(MotionEvent ev):通过调用dispatchTouchEvent(MotionEvent ev)响应用户的触摸事件行为;
dispatchKeyEvent(KeyEvent event):通过调用dispatchKeyEvent(KeyEventevent)响应用户的按键事件;
onConfigurationChanged(Configuration newConfig):通过调用onConfigurationChanged(Configuration newConfig)响应***配置变更,如横竖屏切换;
onBackPressed():通过调用onBackPressed()响应用户手机回退事件;
onActivityResult(int requestCode,int resultCode,Intent data):通过调用onActivityResult(int requestCode,int resultCode,Intent data)响应***请求行为或者请求其他Activity数据返回;
onActivityResult(int requestCode,int resultCode,Bundle bundle):通过调用onActivityResult(int requestCode,int resultCode,Bundle bundle)获取其他页面返回的数据。
支持不同的页面跳转方式,具体的跳转逻辑可根据实际情况由我们自己控制,如跳转到指定页面,需要释放中间某一个页面或者前面的所有页面(比如token过期跳转到登录页),可以扩展堆栈方法来释放页面,因为可以管理堆栈所有可以高度的定制。
FragmentUI页面之间传递数据的方式主要包括:
跳转其他页面时,在调用startFragment中使用bundle携带需要传递的数据信息,目标对象通过调用onCreate(Bundle bundle)获取携带的数据信息;
页面关闭时,在调用backFragment中使用bundle携带需要传递的数据信息,返回对象通过调用onActivityResult(int requestCode,int resultCode,Bundle bundle)获取携带的数据信息。
二、基类Activity关联FragmentUI的生命周期
为了让FragmentUI有对应生命周期的方法,创建一个基类Activity,将其作为FragmentUI的容器,并提供FragmentUI对应生命周期的方法。
Activity有自己的生命周期,在每个生命周期的方法内调用对应FragmentUI的生命周期,可达到关联生命周期的目的。
三、创建FragmentUI管理类
创建FragmentUI管理类,使FragmentUI与FragmentUI管理类之间形成关联,所述FragmentUI管理类用于页面的管理,提供页面管理的操作主要包括:
(1)获取当前栈内页面数量;
(2)获取当前栈顶页面;
(3)通过index移除某个页面;
(4)启动新的页面;
(5)回退前面某个页面;
(6)移除栈内所有页面。
上述这些功能摒弃了***的Fragment,由自定义FragmentUI进行堆栈管理。
所述FragmentUI管理类用于处理不同FragmentUI之间的页面跳转的方法,主要包括:
1、启动新的页面
通过调用startFragment(Class<?extends FragmentUI>fragment,Bundlebundle,int animId,FragmentUI curUI,boolean releaseCur),开启一个新的页面,具体跳转实现由堆栈统一调度;其中,fragment表示目标对象,bundle携带的参数可以为null,animid表示动画类型,releaseCur表示是否释放当前页面。
如图2,开启新页面的方法为:
A01、判断是否是当前FragmentUI发起的跳转,如不是则不处理;
A02、如果正在执行跳转动画又作了跳转操作,调用preHandle()中止之前的跳转动画;
A03、获取当前FragmentUI的栈帧信息并调用当前FragmentUI的onPause()方法;
A04、调用目标FragmentUI的onAttach()、setArguments(bundle)、onCreate()、prepareView()并通过调用addView()将view加到容器内;
A05、调用当前FragmentUI的onStop()和onFragmentUIChange()方法;
A06、判断是否释放当前FragmentUI,如需释放的话调用当前FragmentUI的onDestroyView()和onDestroy()并通过stack.remove(cur)方法将当前FragmentUI从堆栈中移除,再执行A07步骤;如无需释放当前FragmentUI,则执行A07步骤;
A07、调用目标FragmentUI的onStart()和onResume()方法并通过stack.push(target)方法将目标FragmentUI加入到堆栈中;
A08、通过addAnimation添加动画,调用startAnim()方法启动动画,等待动画结束;
A09、判断是否释放当前view,如需释放则调用removeView()将需要移除的view从容器中移除,页面跳转结束;如无需释放,通过
setVisibility(View.INVISIBLE)使当前view不可见(隐藏),页面跳转结束。
2、回退到上一个页面或者某个特定页面
通过调用backFragment(int animId,Bundle bundle,FragmentUI curUI)方法来实现,具体跳转实现由堆栈统一调度;其中,animid表示动画类型,bundle携带的参数可以为null。
如图3,返回前一页面或特定页面的方法为:
B01、判断是否是当前FragmentUI发起的跳转,如不是则不处理;
B02、如果正在执行跳转动画又作了跳转操作,通过preHandle()中止之前的跳转动画,通过stack.pop()使当前页面出栈,通过stack.peek()获取到前一个页面;
B03、判断是否跳转到特定页面,如果是,则执行遍历查找方法直至找到对应的页面并释放中间页面数据,再执行B04至B08步骤;如否(退回到前一页面),则依次执行B04至B08步骤;
B04、获取当前FragmentUI的栈帧信息并调用当前FragmentUI的onPause()和onStop()方法;
B05、获取栈内的前一个FragmentUI并通过View.setVisibility()使前一页面view显示;
B06、调用前一个FragmentUI的onActivityResult()和onResume()方法;
B07、调用当前FragmentUI的onDestoryView()和onDestory()方法;
B08、通过addAnimation添加动画,调用startAnim()方法启动动画,等待动画结束,通过removeView()将当前view从容器中移除,页面跳转结束。
所述遍历查找方法为:
B031、依次调用前一个页面的onStop()、onDestroyView()和onDestroy()方法;
B032、通过stack.pop()将前一个页面从堆栈中移除,通过removeView()从容器中移除前一个页面view;
B033、通过stack.peek()获取到前一个页面,判断是否为对应的目标页面,如是,完成遍历查找;如否,继续执行B031至B033直至找到对应的目标页面。
上列详细说明是针对本发明可行实施例的具体说明,该实施例并非用以限制本发明的专利范围,凡未脱离本发明所为的等效实施或变更,均应包含于本案的专利范围中。
Claims (10)
1.一种Android平台的单Activity页面架构方法,其特征在于,创建自定义FragmentUI,利用所述FragmentUI架构单Activity页面,包括:
FragmentUI创建和生命周期管理:自定义FragmentUI提供了一种自定义扩展生命周期的工具框架,利用所述FragmentUI中的工具可根据页面不同时期的状态提供不同的生命周期,支持响应用户交互行为,支持不同的页面跳转方式,支持不同状态下的页面传递数据;
基类Activity关联FragmentUI的生命周期:创建一个基类Activity,将其作为FragmentUI的容器,并通过在Activity的每个生命周期的方法内调用对应FragmentUI的生命周期,达到关联生命周期的目的;
创建FragmentUI管理类,使FragmentUI与FragmentUI管理类之间形成关联,所述FragmentUI管理类用于处理不同FragmentUI之间的页面跳转,以及提供页面管理操作。
2.根据权利要求1所述的一种Android平台的单Activity页面架构方法,其特征在于,所述根据页面不同时期的状态提供不同的生命周期的方法包括:
onAttach(Activity activity):FragmentUI关联Activity时回调的方法;
onCreate(Bundle saveInstanceState):创建FragmentUI实例时调用的方法;
onCreateView(LayoutInflater inflater,ViewGroup container,BundleavedInstanceState):创建FragmentUI页面视图时调用的方法;
onStart():使页面可见时调用的方法;
onResume():使页面获取焦点时调用的方法;
onPause():使页面不可见并失去焦点时调用的方法;
onStop():使页面即将不可见时调用的方法;
onFragmentUIChange():切换至下一个页面时调用的方法,并紧跟在前一个页面的onStop()方法调用之后;
onDestoryView():使页面与当前Activity取消关联即将销毁时调用的方法;
onDestory():使页面不再使用即将被销毁时调用的方法;
onLoadData(Bundle bundle):使页面数据刷新的方法。
3.根据权利要求1所述的一种Android平台的单Activity页面架构方法,其特征在于,所述支持响应用户交互行为的方法包括:
dispatchTouchEvent(MotionEvent ev):响应用户的触摸事件行为时调用的方法;
dispatchKeyEvent(KeyEvent event):响应用户的按键事件时调用的方法;
onConfigurationChanged(Configuration newConfig):响应***配置变更时调用的方法;
onBackPressed():响应用户手机回退事件时调用的方法;
onActivityResult(int requestCode,int resultCode,Intent data):响应***请求行为或者请求其他Activity数据返回时调用的方法;
onActivityResult(int requestCode,int resultCode,Bundle bundle):获取其他页面返回的数据时调用的方法。
4.根据权利要求1所述的一种Android平台的单Activity页面架构方法,其特征在于,所述支持不同状态下的页面传递数据的方法包括:
跳转其他页面时,在调用startFragment中使用bundle携带需要传递的数据信息,目标对象通过调用onCreate(Bundle bundle)获取携带的数据信息;
页面关闭时,在调用backFragment中使用bundle携带需要传递的数据信息,返回对象通过调用onActivityResult(int requestCode,int resultCode,Bundle bundle)获取携带的数据信息。
5.根据权利要求1所述的一种Android平台的单Activity页面架构方法,其特征在于,所述FragmentUI管理类用于处理不同FragmentUI之间的页面跳转的方法,包括:通过调用startFragment(Class<?extends FragmentUI>fragment,Bundle bundle,int animId,FragmentUI curUI,boolean releaseCur)启动新的页面,其中,fragment表示目标对象,bundle携带的参数可以为null,animid表示动画类型,releaseCur表示是否释放当前页面。
6.根据权利要求5所述的一种Android平台的单Activity页面架构方法,其特征在于,所述FragmentUI管理类启动新页面的方法为:
A01、判断是否是当前FragmentUI发起的跳转,如不是则不处理;
A02、如果正在执行跳转动画又作了跳转操作,调用preHandle()中止之前的跳转动画;
A03、获取当前FragmentUI的栈帧信息并调用当前FragmentUI的onPause()方法;
A04、调用目标FragmentUI的onAttach()、setArguments(bundle)、onCreate()、prepareView()并通过调用addView()将view加到容器内;
A05、调用当前FragmentUI的onStop()和onFragmentUIChange()方法;
A06、判断是否释放当前FragmentUI,如需释放的话调用当前FragmentUI的onDestroyView()和onDestroy()并通过stack.remove(cur)方法将当前FragmentUI从堆栈中移除,再执行A07步骤;如无需释放当前FragmentUI,则执行A07步骤;
A07、调用目标FragmentUI的onStart()和onResume()方法并通过stack.push(target)方法将目标FragmentUI加入到堆栈中;
A08、通过addAnimation添加动画,调用startAnim()方法启动动画,等待动画结束;
A09、判断是否释放当前view,如需释放则调用removeView()将需要移除的view从容器中移除,页面跳转结束;如无需释放,通过setVisibility(View.INVISIBLE)使当前view不可见(隐藏),页面跳转结束。
7.根据权利要求1所述的一种Android平台的单Activity页面架构方法,其特征在于,所述FragmentUI管理类用于处理不同FragmentUI之间的页面跳转的方法,还包括:
通过调用backFragment(int animId,Bundle bundle,FragmentUI curUI)返回到前一个页面或前面某个特定页面;其中,animid表示动画类型,bundle携带的参数可以为null。
8.根据权利要求7所述的一种Android平台的单Activity页面架构方法,其特征在于,所述FragmentUI管理类返回到前一个页面或者前面某个特定页面的方法为:
B01、判断是否是当前FragmentUI发起的跳转,如不是则不处理;
B02、如果正在执行跳转动画又作了跳转操作,通过preHandle()中止之前的跳转动画,通过stack.pop()使当前页面出栈,通过stack.peek()获取到前一个页面;
B03、判断是否跳转到特定页面,如果是,则执行遍历查找方法直至找到对应的页面并释放中间页面数据,再执行B04至B08步骤;如否,则依次执行B04至B08步骤;
B04、获取当前FragmentUI的栈帧信息并调用当前前FragmentUI的onPause()和onStop()方法;
B05、获取栈内的前一个FragmentUI并通过View.setVisibility()使前一页面view显示;
B06、调用前一个FragmentUI的onActivityResult()和onResume()方法;
B07、调用当前FragmentUI的onDestoryView()和onDestory()方法;
B08、通过addAnimation添加动画,调用startAnim()方法启动动画,等待动画结束,通过removeView()将当前view从容器中移除,页面跳转结束。
9.根据权利要求8所述的一种Android平台的单Activity页面架构方法,其特征在于,所述遍历查找方法为:
B031、依次调用前一个页面的onStop()、onDestroyView()和onDestroy()方法;
B032、通过stack.pop()将前一个页面从堆栈中移除,通过removeView()从容器中移除前一个页面view;
B033、通过stack.peek()获取到前一个页面,判断是否为对应的目标页面,如是,完成遍历查找;如否,继续执行B031至B033直至找到对应的目标页面。
10.根据权利要求1所述的一种Android平台的单Activity页面架构方法,其特征在于,所述FragmentUI管理类提供页面管理操作的方法包括:
C01、获取当前栈内页面数量;
C02、获取当前栈顶页面;
C03、通过index移除某个页面;
C04、启动新的页面;
C05、回退前面某个页面;
C06、移除栈内所有页面。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310672705.7A CN116954790A (zh) | 2023-06-07 | 2023-06-07 | 一种Android平台的单Activity页面架构方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310672705.7A CN116954790A (zh) | 2023-06-07 | 2023-06-07 | 一种Android平台的单Activity页面架构方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116954790A true CN116954790A (zh) | 2023-10-27 |
Family
ID=88451869
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310672705.7A Pending CN116954790A (zh) | 2023-06-07 | 2023-06-07 | 一种Android平台的单Activity页面架构方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116954790A (zh) |
-
2023
- 2023-06-07 CN CN202310672705.7A patent/CN116954790A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7013466B2 (ja) | アプリケーションデータ処理方法、装置、及びコンピュータプログラム | |
JP4005623B2 (ja) | ウィンドウ表示システム、ウィンドウ表示方法、プログラム開発支援装置及びサーバ装置 | |
US20160188363A1 (en) | Method, apparatus, and device for managing tasks in multi-task interface | |
US10416994B2 (en) | Control method | |
CN110110262A (zh) | 浏览器内存管理方法、装置和设备 | |
KR100773296B1 (ko) | 휴대용 단말기에서 메시지 관리 장치 및 방법 | |
CN110633032B (zh) | 终端设备的图标显示方法及装置 | |
US20240086231A1 (en) | Task migration system and method | |
US11455075B2 (en) | Display method when application is exited and terminal | |
CN104571877A (zh) | 一种页面的显示处理方法及装置 | |
CN111597000A (zh) | 一种小窗口管理方法及终端 | |
CN109857489B (zh) | 基于Android***的开发***、解耦方法和装置 | |
CN110187952B (zh) | 收纳内容的方法、装置、终端及存储介质 | |
CN109361948B (zh) | 界面管理方法、智能终端及可读存储介质 | |
JP4177434B2 (ja) | ウィンドウ表示システム、情報処理システム、クライアント装置、電話機、情報機器、家電機器及び機器 | |
CN114185508B (zh) | 在Linux兼容安卓***上进行左右分屏的方法 | |
TW201826109A (zh) | 頁面展示方法及裝置 | |
WO2019007409A1 (zh) | 一种显示方法、装置、智能终端及计算机可读存储介质 | |
CN113268212A (zh) | 投屏方法、装置、存储介质及电子设备 | |
CN108287647B (zh) | 一种应用运行方法及装置 | |
CN109388309A (zh) | 菜单的显示方法、装置、终端及存储介质 | |
WO2019071618A1 (zh) | 一种图像处理方法及设备 | |
CN107368235B (zh) | 功能机的多任务切换方法和功能机 | |
CN111324398B (zh) | 最近内容的处理方法、装置、终端及存储介质 | |
CN112306256B (zh) | 应用程序切换处理方法、装置和电子设备 |
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 |