android之fragment活动栈单例

在Android开发中,遇到fragment活动栈管理的问题,具体表现为返回操作时界面异常。通过在C到B的跳转中加入transaction.addToBackStack解决了栈问题,但产生了多个重复fragment对象。探讨了Android activity的launchMode单例模式,并提出使用数据类存储更新数据以及通过add()、hide()、show()来切换fragment,以避免重复实例化并保持数据同步。文章最后分享了测试运行结果和关键代码。
摘要由CSDN通过智能技术生成

本文主要记录一些零碎的东西

最近参加了一个做地图的公司的面试,怎么说呢,反正问的我都不会,问题感觉偏向内存的显示优化方向,比如Bitmap占内存大小啦之流,只怪自己学业不精。

项目还要继续,在写项目时,发现fragment的活动栈有些问题,回想起面试官问过这个问题 ,研究一下。

说一下问题的出现,我的fragment,从A--->(transaction.addToBackStack)B--->(transaction.addToBackStack)C--->B--->(transaction.addToBackStack)C,然后在这是按返回按钮,回退到B,再次按回退按钮,界面没有反应,在顶部的导航栏中将当前的布局文件的内容切换成另外一个fragment,没有压入栈,这时就会发现界面上乱套了,两个界面都显示着,新切换的界面在上C界面在下,问题就出现啦。

这里解决也简单,在C--->B是加上transaction.addToBackStack,就没有问题了,但是又会出现一个问题,没有做单例,如果我一直C--->B--->C--->B--->C...活动栈中存在多个重复的B和C对象。

那如何做单例呢,activity里做单例可以在mainfest.xml文件里的activity 里配置android:launchMode,有四个参数

standard  每次都会新建,每个Task都可以有,且每个Task都可以有多个实例(每个Task都可以有,且可以有多个)
singleTop 当前实例如果在栈顶,就不新建实例,调用其OnNewIntent。 如不在栈顶,则新建实例 (每个Task都可以有,且可以有多个,在栈顶时可复用)
singleTask 新建一个Task,如果已经有其他的Task并且包含该实例,那就直接调用那个Task的实例。(只有一个Task中会有)
singleInstance 新建一个Task,且在该Task中只有它的唯一一个实例。 (只有一个Task会有,且该Task中只有它)

但是上面这么好的东西,但是不是我想要的效果,其实我每次C--->B--->C--->B--->C...时数据都是变化的,我想实现的是使用一个对象,但是每次replace时不仅要切换界面,还要更新显示的数据,目前还没有想到很好的解决方案。

- - - - - - - - - - - - -  - - - - - - -更新 2016-04-13  - -- - - - - - -- - - - - - - - - - - - - 

想着fragment切换时不传数据,把要更新的数据写在一个单独的类中有get/set方法&#x

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值