为什么这个片段的字段为空?
Why is this fragment's fields null?
在父片段的 onCreateView 方法中,我调用子片段管理器将片段插入到布局中。此子片段包含一些 FloatingActionButtons。
提交事务后,我会检查我的基础列表的内容(为 RecyclerView 供电),并根据是否存在任何值,我 hide/unhide 一些 FloatingActionButtons。
但是它告诉我这些按钮是空的!提交 Fragment 事务不会首先调用其所有典型的生命周期事件吗?有没有办法强制它等待?对此有更好的做法吗?
提交不是同步的。无法保证片段的生命周期何时执行。
如果您需要知道片段何时 "ready",请执行从片段到托管 activity 的回调,让它知道。
class CustomB extends CustomA {
interface Listener {
void onViewCreated();
}
public View onCreateView() {
View v = super.onCreateView();
if (getActivity() instanceof Listener) {
((Listener)getActivity()).onViewCreated();
}
return v;
}
}
一般来说,您应该尝试将您的片段设计为独立的。如果片段与 activity 紧密绑定,请考虑将功能实现为自定义 View
。
在父片段的 onCreateView 方法中,我调用子片段管理器将片段插入到布局中。此子片段包含一些 FloatingActionButtons。
提交事务后,我会检查我的基础列表的内容(为 RecyclerView 供电),并根据是否存在任何值,我 hide/unhide 一些 FloatingActionButtons。
但是它告诉我这些按钮是空的!提交 Fragment 事务不会首先调用其所有典型的生命周期事件吗?有没有办法强制它等待?对此有更好的做法吗?
提交不是同步的。无法保证片段的生命周期何时执行。
如果您需要知道片段何时 "ready",请执行从片段到托管 activity 的回调,让它知道。
class CustomB extends CustomA {
interface Listener {
void onViewCreated();
}
public View onCreateView() {
View v = super.onCreateView();
if (getActivity() instanceof Listener) {
((Listener)getActivity()).onViewCreated();
}
return v;
}
}
一般来说,您应该尝试将您的片段设计为独立的。如果片段与 activity 紧密绑定,请考虑将功能实现为自定义 View
。