多次调用片段 onCreateView

Posted

技术标签:

【中文标题】多次调用片段 onCreateView【英文标题】:fragment onCreateView called many times 【发布时间】:2014-04-23 15:24:53 【问题描述】:

我正在附加Activity 的片段(许多片段到FrameLayout),每个片段在onCreateView() 中都有自己的视图。

现在,

如果我旋转屏幕横向/纵向,则调用片段的onCreateView(),而不是调用其附加的活动的onCreate() 方法。因此,视图被渲染了两次。

我希望每次配置更改时都调用 Activity 的 onCreate()。有可能吗?

活动: MainActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) 
    getSupportFragmentManager().beginTransaction()
        .add(R.id.layout_replace, new MyFragment()).commit();

片段: MyFragment.java

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)          
    return (ScrollView)inflater.inflate(R.layout.some_layout, container, false);

【问题讨论】:

旋转时,Activity 被销毁并启动。如果附加了Fragment,则将调用onCreateView()。你能展示你的代码的一部分吗? @FlorianMacLanglade 我已经更新了我的示例代码 是否需要动态添加片段?如果没有,您可以直接在布局 xml 中声明片段。 它必须动态添加 【参考方案1】:

解决了这个问题!

实际问题出在FragmentTransaction 上,我使用.add() 添加片段,这会导致视图被填充两次。

改为使用:

.replace(R.id.yourId, fragment)

【讨论】:

哇。为我节省了很多时间。谢谢@yashhy。

以上是关于多次调用片段 onCreateView的主要内容,如果未能解决你的问题,请参考以下文章

防止同一片段多次堆叠 (addToBackStack)

OnResume / OnPause多次调用

从 Fragment 返回时,Flow onEach/collect 被多次调用

使用 rxJava 和改造多次调用另一个请求中的请求

OnCreateView 多次调用/使用 ActionBar 和 Fragments

如何多次使用同一个片段?