Android開發之多Fragment切換優化


前言:

有時候Activity里面或者大Fragment里面切換小fragment的時候,會出現卡頓現象,尤其是小fragment裝載數據較多的時候。此時,對fragment切換處理也能優化切換的速度。

常用方法:

replace()
該方法只是在上一個Fragment不再需要時采用的簡便方法
show() hide() add()
正確的切換方式是add(),切換時hide(),add()另一個Fragment;再次切換時,只需hide()當前,show()另一個。

****看代碼吧****

//不優化的做法
//每次切換的時候,Fragment都會重新實例化,重新加載一邊數據,這樣非常消耗性能和用戶的數據流量
public void switchFragment(Fragment targetFragment) {
    if (targetFragment == null)
      return;
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    //目標Fragment替換原來的Fragment
    transaction.replace(R.id.content, targetFragment);
    transaction.commit();
  }

//優化的做法
Fragment currentFragment;//這里currentfragment在下面方法可能會報空指針,請自行處理
private void switchFragment(Fragment targetFragment) {
    FragmentTransaction transaction = getSupportFragmentManager()
            .beginTransaction();
    if (!targetFragment.isAdded()) {
        transaction
                .hide(currentFragment)
                //add也是一種加載方式,並不是單純的show
                .add(R.id.main_fragment, targetFragment)
                .commit();
        System.out.println("還沒添加呢");
    } else {
        transaction
                .hide(currentFragment)
                //show出來
                .show(targetFragment)
                .commit();
        System.out.println("添加了( ⊙o⊙ )哇");
    }
    currentFragment = targetFragment;
}

****注意事項****

1. 上面的currentFragment在使用時需在方法里加邏輯判斷,避免空指針。具體需要結合個人使用場景。

2. show出來的fragment在獲取焦點時可能出現問題,而add出來的獲取焦點沒問題。也需要自己處理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM