1. 程式人生 > >Fragment切換 儲存狀態(add show hide)

Fragment切換 儲存狀態(add show hide)

前言

關於Fragment的切換問題也是遇到好多次了,今天有時間做一個簡單的記錄。常見的我們會在底部Tab的切換時用到,當然,這篇文章也只是簡單的說明如何去實現,就先不深究其所以然了,因為網上已經有很多關於Fragment addreplace區別的文章了,自己沒有獨到的見解寫再多也是顯的蒼白無力。

Fragment切換的兩種方式

1. replace

FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(layoutId,fragment).commit;

replace每次都會把之前的fragment remove掉在替換成新的,所以每次切換,fragment都是重新載入,如果有網路請求的話,每次切換就需要傳送一次請求,這顯然不妥,這樣既耗費流量使用者體驗也不好。

2. add ( show、hide )

FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().add(layoutId,fragment).commit;

add這種方式是將 fragment 新增到容器中,add之後是一層一層疊加的,故而這種方式也是比較浪費資源的。再次切換的時候,我們便可以用show和hide控制它的顯示和隱藏了。

例項程式碼

/**
  * @param currentFragment 當前顯示的Fragment
  * @param toFragment 將要跳轉的Fragment
  */
 public void switchContent(Fragment currentFragment, Fragment toFragment) {
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        // 先判斷是否被add過
        if (!to.isAdded()) {
            // 隱藏當前的fragment,add下一個到Activity中 
transaction.hide(from).add(R.id.parent_layout, to).commit(); } else { transaction.hide(from).show(to).commit(); // 隱藏當前的fragment,顯示下一個 } }

這個就是主要用到的方法了,一般我們會在MainActivity或者要顯示這些Fragment的宿主類中先初始化add一個預設顯示的fragment,將currentFragment設定預設值,然後在點選底部Tab按鈕的時候便去呼叫上面的方法。切換你要顯示的fragment並重新賦值currentFragment 。Perfact^_^…