我有一个动态替换片段的活动:
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 Pattern使片段成为主题,活动成为观察者),然后在onCreateView
或{{1}时调用它完成后,最后用需要设置的数据回调片段。但是,我需要为几个片段执行此操作,因此我必须为每个片段创建一个侦听器,我再次认为这是不好的。
有没有更好/更简单的方法呢?
答案 0 :(得分:37)
FragmentTransaction
后, commit()
不会立即应用。您可以手动强制更新:
...
mFragmentManager.executePendingTransactions();
AFAIK事件回调的目的是与Fragment
进行自定义通信,超出通常的生命周期。
答案 1 :(得分:4)
正确的方法是为Activity
类定义一个接口,希望显示您的Fragment
应该实现的类。这样,在onAttach
上,您不会转发到特定的Activity
,而是转发到您的界面。
例如参见:http://developer.android.com/guide/topics/fundamentals/fragments.html#EventCallbacks
答案 2 :(得分:2)
您应该使用onActivityCreated
来设置值。
在onCreateView
中设置引用,然后在onActivityCreated
中为其设置值。