FragmentTransaction.commit()后不立即调用onCreateView()

Ask*_* B. 15 android design-patterns android-fragments

我有一个活动,我动态地替换片段:

private void goToFragment(Fragment newFragment, String tag) {
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    ft.replace(R.id.fragment_container, newFragment, tag);
    ft.addToBackStack(null);
    ft.commit();
}
Run Code Online (Sandbox Code Playgroud)

现在,我想访问片段内的视图,这样我就可以在调用后立即将数据(我已存储在我的活动中)放入其中goToFragment.

问题是,在onCreateView完全呈现片段之前不会调用片段,至少根据我的理解.

我知道覆盖onAttach(Activity activity)片段是一种方法,但我必须将它专门用于我的活动 - 我只是想避免这种情况,因为我认为片段依赖于特定活动是不好的做法.

据我所知,Fragment没有任何听众(作为主题)实施.

所以我想我必须创建自己的监听器(使用Observer模式使片段成为主题,活动成为观察者),然后在完成onCreateView或调用时调用它onAttach,然后最终使用数据调用片段需要设定.但是,我需要为几个片段执行此操作,因此我必须为每个片段创建一个侦听器,我再次认为这是不好的.

有没有更好/更简单的方法来做到这一点?

And*_*kov 37

FragmentTransaction调用后不会立即应用commit().您可以手动强制更新:

...
mFragmentManager.executePendingTransactions();
Run Code Online (Sandbox Code Playgroud)

AFAIK事件回调的目的是Fragment在其通常的生命周期之外进行自定义通信.