好久没有深入接触Android,遇到一个简单的页面传递问题,让我深深的感受到了,自己知识的缺少。
话不多说。正文上。
今天就说的是一个简单的一个多页面问题:
题目如下:
A页面只能启动B页面,且A页面不会finish掉,B页面只能启动C页面,且B页面不会finish掉。
C页面关闭的时候B页面也同时关掉,并且C页面的数据要传递给A页面,并且A页面是不能重新开启的。
如图:
方案7:用static变量来进行值的传递
如图:
下面我们来说下解决方案,解决方案有五种,大家可以根据自己的喜好来选择:
方案1:采用单例模式
把A设置为单例,C启动A页面并把参数给传递进去 采用startactivity来进行启动
如图:
看到红框里面标出的就是采用单例模式
方案2:
采用局部广播来进行数据传递
动态注册广播
如果a启动b的时候a没有finish的话a实际上是没有被销毁的,在后台呢,广播的话只是从后台唤醒了,并不会产生一个新的A
(这个方案我还没有仔细看,好久没有接触广播,所以我还需要看下,之前就一直害怕这种广播机制,不想触碰,但是现在博主是一个打不死的小强,感觉编程其实没有那么可怕,有着一颗学习的心。什么都不怕的节奏,呼呼)、
方案3:把需要传递的数据保存在XML里,在A页面要A的onResume里面取出来。但是现在考虑到一个问题就是,比如页面在运行中,这时突然拍照,或者来电话的时候立马又会走onstop-onresume,会二次运行。所以又需要一个变量。对于稳定性和易用性,不建议使用此方案。
方案4:A写接口,C页面实现。
方案5:
baseactivity
复写 startactivity
,
在application 保存启动记录
,然后进行关闭
方案6:
eventbus第三方插件
EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。
一个小小的问题,可以有这几种解决方案,所以遇到不太把握的问题,多向大家请教,会收到意想不到的结果。