Android Fragment newInstance() 如何让其目录怎么自动生成成?

  • 使用比较麻烦代码量较多;
  • 在Fragment嵌套的场景下,恢复会有问题原因在于:页面重启后,在父Fragment没有初始化完成前getChildFragmentManager()子栈内的子Fragment是空,只有父Fragment初始化完成后子栈内的子Fragment才能正确获取到。

从源码角度想到的解决方案:自己保存Fragment的Hidden状态

简书著作权归作者所有任何形式的转载都请联系作者获得授权并注明出处。

最近在看Google技术文档的时候发现了┅种新的方式来实例化Fragment就是采用静态工厂的方式创建Fragment。我们在使用 studio创建一个类的时候选择New

 
在activity中采用两种不同的方式来实例化Fragment,顶部的Fragment通过构造方法将参数传递给它而底部的Fragment通过newInstance的方式实例化并传参。两个Fragment的代码如下所示:
 
 

在两个Fragment第一行都写一个相同的默认参数:“啥也没有”ok,运行工程:

 

嗯没毛病,两个Fragment都顺利的接收到来自activity的数据然后我们把屏幕横过来,看看会出现怎样的状况:

 

咦。顶部的Fragment的数据呢?为什么只显示默认的数据activity给它传过去的数据哪去了呢?
我们来分析一下产生上述情况的原因:当我们横竖屏切换的時候activity会重建,相应的依附于它上面的Fragment也会重新创建。好顺着这个思路,进activity的onCreate方法中看看:
 
 
 
 
 
终于走到了Fragment最终被实例化创建的地方我們可以看到Fragment对象被反射创建之后,会调用这么一句代码:f.mArguments = args; 哦原来如此,Fragment在重新创建的时候只会调用无参的构造方法并且如果之前通过fragment.setArguments(bundle)這种方式设置过参数的话,Fragment重建时会得到这些参数所以,在onCreate中我们可以通过getArguments()的方式拿到我们之前设置的参数同时由于Fragment在重建时并不会調用我们自定义的带参数的构造方法,所以我们传递的参数它也就获取不到了这就是为什么会出现上述情况的原因。
细心的童鞋可以发現上面的代码在catch语句当中抛出了几个异常,意思是:在Fragment重建过程中确保你的Fragment的类是public的,并且带有一个public的空参的构造器否则就让你崩潰~~~
好了,抛弃之前那些不好的代码习惯吧支持谷歌,拥抱变化

我要回帖

更多关于 目录怎么自动生成 的文章

 

随机推荐