我們知道塑煎,Activity 在一些特殊狀況下會(huì)發(fā)生 destroy 并重新 create 的情形瘪阁,比如屏幕旋轉(zhuǎn)、內(nèi)存吃緊時(shí)喳逛;對應(yīng)的瞧捌,依附于 Activity 存在的 Fragment 也會(huì)發(fā)生類似的狀況。而一旦重新 create 時(shí)润文,F(xiàn)ragment 便會(huì)調(diào)用默認(rèn)的無參構(gòu)造函數(shù)姐呐,導(dǎo)致無法執(zhí)行有參構(gòu)造函數(shù)進(jìn)行初始化工作。
好在 Fragment 提供了相應(yīng)的 API 幫助我們解決這個(gè)問題典蝌。利用 bundle 傳遞數(shù)據(jù)曙砂,參考代碼如下:
public static OneFragment newInstance(int args){
OneFragment oneFragment = new OneFragment();
Bundle bundle = new Bundle();
bundle.putInt("someArgs", args);
oneFragment.setArguments(bundle);
return oneFragment;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle bundle = getArguments();
int args = bundle.getInt("someArgs");
}
為什么要在這里利用bundle傳遞數(shù)據(jù)呢?為什么不能構(gòu)造方法Constructor傳遞數(shù)據(jù)呢骏掀?
因?yàn)?而一旦重新 create 時(shí)鸠澈,F(xiàn)ragment 便會(huì)調(diào)用默認(rèn)的無參構(gòu)造函數(shù)乔夯,導(dǎo)致無法執(zhí)行有參構(gòu)造函數(shù)進(jìn)行初始化工作。