1. 程式人生 > >fragment中的replace和hide與shou方法的區別

fragment中的replace和hide與shou方法的區別

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; }