有时,我有一些无头片段,我需要在onCreate
之前进行一些初始化
例如,
public class NetworkMonitorFragment extends Fragment {
public static NetworkMonitorFragment newInstance() {
return new NetworkMonitorFragment();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
public void init() {
// This function shall be call even before onCreate.
}
}
NetworkMonitorFragment networkMonitorFragment = NetworkMonitorFragment.newInstance();
networkMonitorFragment.init();
我想知道,在Fragment
构造函数中进行某些初始化是一种很好的做法吗?这样做有什么缺点吗?我问的原因是因为我没有看到很多代码示例。
public class NetworkMonitorFragment extends Fragment {
public static NetworkMonitorFragment newInstance() {
return new NetworkMonitorFragment();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
public NetworkMonitorFragment() {
init();
}
private void init() {
// This function shall be call even before onCreate.
}
}
NetworkMonitorFragment networkMonitorFragment = NetworkMonitorFragment.newInstance();
答案 0 :(得分:1)
你当然可以,甚至其他方法,如Fragment.instantiate(Context context, String fname, Bundle args)
调用newInstance()
调用默认构造函数。虽然你必须知道一些事情:
因此,虽然变量实例化或基于外部上下文的一些快速计算,但是,例如,Date非常好,但是同步或异步解码甚至是小位图是一种快速解决问题的方法。
答案 1 :(得分:0)
如果此功能的执行和结果与片段生命周期无关并且不依赖于父活动那么,我猜,这只是一个偏好问题。
您可以通过描述此功能的作用来获得更具体的答案。
答案 2 :(得分:0)
如果您想在创建片段之前执行某些操作,请在 onAttach
中执行此操作( onAttach 始终在 onCreate ,look fragment lifecycle之前调用)
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
init();
...
}
如果您想确保创建视图,请以相同的方式在 onViewCreated 中执行此操作。