片段再次呼叫相同的网络呼叫

时间:2017-01-16 07:46:57

标签: android android-studio android-fragments fragment-lifecycle

我有两个片段。在第一个片段中,有一个我从服务器获取的项目的列表视图。当我单击一个列表项时,它将导航到第二个片段,其中包含我单击的项目的详细信息。但是当我按下并导航到上一个片段时,我必须经历从服务器获取数据的相同过程。有办法避免这种情况吗?我可以在不再发出网络请求的情况下导航回上一个片段吗?

1 个答案:

答案 0 :(得分: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();
   }

}

希望这会有所帮助。