Android優(yōu)化之切換Fragment

前言:課程設計已經(jīng)基本完成,但是在點擊切換Fragment的時候總是感覺有點卡頓,第一次讀取網(wǎng)絡服務器數(shù)據(jù)就體現(xiàn)的特別明顯,在本地的話也會稍微有一點卡頓,因為我引用了一個多Fragment的框架,強迫癥的我看著就是不舒服,查看框架源碼...,果然,框架犯了一個低級的錯誤:切換Fragment竟然都是用replace()方法來替換Fragment。


切換Fragment的方法簡介

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


看源碼吧

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

//正確的做法
private void switchFragment(Fragment targetFragment) {
    FragmentTransaction transaction = getSupportFragmentManager()
            .beginTransaction();
    if (!targetFragment.isAdded()) {
        transaction
                .hide(currentFragment)
                .add(R.id.main_fragment, targetFragment)
                .commit();
        System.out.println("還沒添加呢");
    } else {
        transaction
                .hide(currentFragment)
                .show(targetFragment)
                .commit();
        System.out.println("添加了( ⊙o⊙ )哇");
    }
    currentFragment = targetFragment;
}

價值源于技術,貢獻源于分享

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容