FragmentManager在Activity重建后,add的fragment消失,救命

牵你衣袖忘却万古愁 2015-01-26 04:24:54
被这个问题折磨了三天了,始终找不到原因要哭了T^T,求救求救

问题是这样的,我想学习制作微信那样的底部导航,用了四个Fragment和自定义控件的方法。为了防止在屏幕旋转时fragment跟着activity销毁,我在fragment的onCreate中增加了 setRetainInstance(true);并跟踪fragment的生命周期显示


01-26 08:04:15.826 3836-3836/com.cosmos.www.cosmos E/MainActivity﹕ ***********onCreate() start***********
01-26 08:04:15.977 3836-3836/com.cosmos.www.cosmos E/MainActivity﹕ new Fragment():消息
01-26 08:04:15.978 3836-3836/com.cosmos.www.cosmos E/MainActivity onCreate()﹕ setDefaultFirstFragment:消息
01-26 08:04:15.978 3836-3836/com.cosmos.www.cosmos E/MainActivity﹕ ***********onCreate() end***********
01-26 08:04:15.981 3836-3836/com.cosmos.www.cosmos E/MessageFragment﹕ onAttach
01-26 08:04:15.986 3836-3836/com.cosmos.www.cosmos E/MessageFragment﹕ onCreate()
01-26 08:04:15.989 3836-3836/com.cosmos.www.cosmos E/MessageFragment﹕ onCreateView
01-26 08:04:15.993 3836-3836/com.cosmos.www.cosmos E/MessageFragment﹕ onActivityCreated
01-26 08:04:15.993 3836-3836/com.cosmos.www.cosmos E/MessageFragment﹕ onStart
01-26 08:04:16.021 3836-3836/com.cosmos.www.cosmos E/MessageFragment﹕ onResume
01-26 08:04:35.198 3836-3836/com.cosmos.www.cosmos E/MessageFragment﹕ onPause
01-26 08:04:35.198 3836-3836/com.cosmos.www.cosmos E/MessageFragment﹕ onStop
01-26 08:04:35.198 3836-3836/com.cosmos.www.cosmos E/MessageFragment﹕ onDestroyView
01-26 08:04:35.199 3836-3836/com.cosmos.www.cosmos E/MessageFragment﹕ onDetach


的确没有被destroy(),然后在activity通过FragmentManager.findFragmentByTag(“消息”)时返回的是null,跟踪FragmentMeneger对象发现mAdded=null,按理应有四个fragment才对。大家有没有出现过这样的问题呢。请帮帮我T^T~~~~
...全文
541 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[/quote] 横屏情况下,你可以尝试重写onConfigurationChanged方法,使activity不销毁。[/quote] 配置文件与onConfigurationChanged都有局限,所以就没采用了,刚刚突然发现是由于低级错误:少写了super.onSaveInstanceState(outState);真是想死的心都有了,谢谢你的热心回复
哎,真难 2015-01-26
  • 打赏
  • 举报
回复
先用List把fragment的实例保存起来
开发者_android 2015-01-26
  • 打赏
  • 举报
回复
当然,你也说了。可以配置manifest文件解决这个问题,为什么不用呢?
开发者_android 2015-01-26
  • 打赏
  • 举报
回复
引用 2 楼 u011029071 的回复:
[quote=引用 1 楼 dalor 的回复:] 不知道你是怎么一思路。 但我觉得,添加完后,切换过程中,只需要FragmentTransaction调用hide方法隐藏当前Fragment,显示切换后的Fragment就可以。 销毁只有在离开当前activity时才有必要去destroy,不然,快速的快速而且频繁的切换时,就会快速频繁的创建和销毁,不太好。
首先谢谢你的回复。 你说的是在不旋转屏幕的情况下,activity不进行reCreate时的情况,我的确使用的是hide和show。 在旋转屏幕时activity会被销毁(更改配置文件的方法除外),我为了防止fragment被销毁所以用了上述方法。 [/quote] 横屏情况下,你可以尝试重写onConfigurationChanged方法,使activity不销毁。
  • 打赏
  • 举报
回复
引用 1 楼 dalor 的回复:
不知道你是怎么一思路。 但我觉得,添加完后,切换过程中,只需要FragmentTransaction调用hide方法隐藏当前Fragment,显示切换后的Fragment就可以。 销毁只有在离开当前activity时才有必要去destroy,不然,快速的快速而且频繁的切换时,就会快速频繁的创建和销毁,不太好。
首先谢谢你的回复。 你说的是在不旋转屏幕的情况下,activity不进行reCreate时的情况,我的确使用的是hide和show。 在旋转屏幕时activity会被销毁(更改配置文件的方法除外),我为了防止fragment被销毁所以用了上述方法。
开发者_android 2015-01-26
  • 打赏
  • 举报
回复
不知道你是怎么一思路。 但我觉得,添加完后,切换过程中,只需要FragmentTransaction调用hide方法隐藏当前Fragment,显示切换后的Fragment就可以。 销毁只有在离开当前activity时才有必要去destroy,不然,快速的快速而且频繁的切换时,就会快速频繁的创建和销毁,不太好。

80,350

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧