0
我有2個片段。在第一個片段中,我從服務器獲取項目的列表視圖。當我點擊一個列表項目時,它會導航到第二個片段,並顯示我點擊的項目的詳細信息。但是當我按回來並導航到前一個片段時,我必須經歷從服務器獲取數據的相同過程。有沒有辦法避免這種情況?我可以導航回到前一個片段而不再發出網絡請求嗎?片段再次調用相同的網絡調用
我有2個片段。在第一個片段中,我從服務器獲取項目的列表視圖。當我點擊一個列表項目時,它會導航到第二個片段,並顯示我點擊的項目的詳細信息。但是當我按回來並導航到前一個片段時,我必須經歷從服務器獲取數據的相同過程。有沒有辦法避免這種情況?我可以導航回到前一個片段而不再發出網絡請求嗎?片段再次調用相同的網絡調用
我不知道你用什麼方法倒退。我認爲這是因爲你已經覆蓋了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();
}
}
希望這會有所幫助。
是的,有很多方法可以避免。 – Piyush
可能你正在使用替換片段事務嗎?使用添加可以幫助(以便片段不會被刪除)。如果你可以添加一些代碼會很有幫助。你可以參考這個https://developer.android.com/guide/components/fragments.html#Transactions –
是的,我正在使用替換方法。這是問題的原因嗎?因爲更換前一個片段時要重新創建狀態又要經過嗎? – slenderm4n