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(); 
    } 

}

希望这会有所帮助。