前言:課程設計已經(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;
}