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

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

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

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

问题是,在片段完全呈现之前,片段的onCreateView没有被调用,至少在我的理解中。

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

据我所知, Fragment没有实现任何监听器(作为主题)。

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

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

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

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

 ... mFragmentManager.executePendingTransactions(); 

AFAIK事件回调的目的是与Fragment自定义通信,超出它的通常生命周期。

正确的方法是为希望显示Fragment应该实现的Activity类定义一个接口。 这样,在onAttach你不会转换为特定的Activity而是转换到你的界面。

例如,请参阅: http : //developer.android.com/guide/topics/fundamentals/fragments.html#EventCallbacks

您应该使用onActivityCreated来设置值。

onCreateView设置引用,然后在onActivityCreated为它们设置值。