当旋转屏幕时,我会显示嵌套片段,但是在一些短暂的时刻,也会显示父片段。
我的MainActivity标识为FrameLayout
,标识为activity_base_container
。
我在活动开始时这样做:
Fragment initialFragment = getInitialFragment();
mFragmentManager.beginTransaction()
.add(R.id.activity_base_container, initialFragment, initialFragment.getClass().getSimpleName())
.commit();
initialFragment
初始片段负责检查某些条件,并依赖它们将启动两个可能的片段之一:
fragmentManager.beginTransaction().replace(R.id.activity_base_container, fragment, fragment.getClass().getSimpleName()).commit();
让我们假设它启动FragmentF
(白衣FrameLayout
,标识为fragment_f_root
)。此片段布局有一组选项。当用户单击其中一个选项时,将创建相应的片段并按以下方式启动:
//The example here is an option that displays a google map.
fragment = FragmentMapMultipleActivity.newInstance();
fragmentManager.beginTransaction()
.replace(R.id.fragment_f_root, fragment)
.addToBackStack(fragment.getClass().getSimpleName())
.commit();
此时一切正常。问题是当我旋转屏幕时。 FragmentF
会短暂显示,然后会立即显示FragmentMapMultipleActivity
嵌套片段。
旋转屏幕后是否有可能只显示嵌套片段,或者我应该更改我的"架构"别的什么?
答案 0 :(得分:1)
应该将我的“架构”改为别的吗?
可能,应该 来自Square的最聪明的Android人士甚至提倡在任何可能的地方避免使用简单的片段:Advocating Against Android Fragments
嵌套的fragemnts反过来会以指数方式增加复杂性。到目前为止,使用它们的唯一好方法是ViewPager
,FragmentPagerAdapter
。在大多数其他情况下,请考虑使用自定义视图
它可以使您的应用程序的生命周期更清晰,更可预测。
除了:
,我认为除了你看到的这种眨眼之外你不能做太多setRetainInstance(true)
并避免在Activity中完全重新创建Fragment,因此在更改配置期间保留片段的数据(然后将相同的保留片段传递给片段管理器)onViewCreate()
轻量级