fragment中的replace和hide與shou方法的區別
阿新 • • 發佈:2019-02-10
FragmentManager fm=getFragmentManager(); // (getSupportFragmentManager()方法是使用v4包的fragment使用)
FragmentTransaction ft=fm.beginTransaction();
在我們使用fragment去填充frame的佈局的時候,有兩個方法可供我們使用,一個是ft.replace(),另一種是使用hide()和shou()方法。這兩個方法所產生的效果是有差別的,
使用ft.replace(),如replace字面意思,就是覆蓋,就是把當前頁面使用你選擇的頁面去覆蓋他,比如從fragmentA—>fragmentB,這樣做,會有一個缺點,就是當你從fragmentB返回上個頁面fragmentA的時候,fragmentA是被重新create的。也就是說,頁面被重新重新整理一樣(想想,假如fragmentA是類似於淘寶商品的頁面,上拉重新整理,你找了十幾分鍾,終於找到喜歡的寶貝了,突然不小心按了購物車,這時候你再點回首頁,竟然重新重新整理了,這時候你會是什麼感覺)當然,根據需求去做就好。
而所謂的hide和shou方法就不一樣,他不會去覆蓋,和把fragment銷燬,只是把它hide(隱藏起來)
下面的程式碼,就是使用hide和show方法的,這樣切換的時候,就不會將上個頁面的資訊重新載入了
indexFragment =0;
public void switchFragment(int checkIndex) {
ft = fm.beginTransaction();
Fragment currentFragment = fragmentList.get(indexFragment);
Fragment targetFragment = fragmentList.get(checkIndex);
if (currentFragment != targetFragment) {
if (!targetFragment.isAdded ()) {
ft.hide(currentFragment).add(
id.my_frame, targetFragment);
} else {
ft.hide(currentFragment).show(targetFragment);
}
} else {
if (!targetFragment.isAdded()) {
ft.add(id.my_frame, targetFragment)
.show (targetFragment);
}
}
ft.commit();
indexFragment = checkIndex;
}