0

我有2個片段。在第一個片段中,我從服務器獲取項目的列表視圖。當我點擊一個列表項目時,它會導航到第二個片段,並顯示我點擊的項目的詳細信息。但是當我按回來並導航到前一個片段時,我必須經歷從服務器獲取數據的相同過程。有沒有辦法避免這種情況?我可以導航回到前一個片段而不再發出網絡請求嗎?片段再次調用相同的網絡調用

+0

是的,有很多方法可以避免。 – Piyush

+1

可能你正在使用替換片段事務嗎?使用添加可以幫助(以便片段不會被刪除)。如果你可以添加一些代碼會很有幫助。你可以參考這個https://developer.android.com/guide/components/fragments.html#Transactions –

+0

是的,我正在使用替換方法。這是問題的原因嗎?因爲更換前一個片段時要重新創建狀態又要經過嗎? – slenderm4n

回答

0

我不知道你用什麼方法倒退。我認爲這是因爲你已經覆蓋了onBackPress方法並通過片段轉換加載片段。當回按時它會啓動片段並創建一個新的複製片段對象。如果可以避免網絡呼叫不會再次呼叫。

你可以試試這個。覆蓋onbackpress方法。

@Override 
public void onBackPressed() { 
    int count = getSupportFragmentManager().getBackStackEntryCount(); 
    if (count == 0) { 
     navigateActivity(HomeActivity.class); 
    } else { 
     getSupportFragmentManager().popBackStackImmediate(); 
    } 
} 

而且如下開始新的片段,

public void switchFragment(Fragment frag) { 
    String backStateName = fragment.getClass().getName(); 

    FragmentManager manager = getSupportFragmentManager(); 
    boolean fragmentPopped = manager.popBackStackImmediate (backStateName, 0); 

    if (!fragmentPopped){ 
     fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
     fragmentTransaction.replace(R.id.report_fragment, frag); 
     fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
     fragmentTransaction.addToBackStack(backStateName); 
     fragmentTransaction.commit(); 
    } 

}

希望這會有所幫助。