【问题标题】:Fragment calls the same network call again片段再次调用相同的网络调用
【发布时间】:2017-01-16 07:46:56
【问题描述】:

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

【问题讨论】:

  • 是的,有很多方法可以避免。
  • 您是否正在使用替换进行片段交易?使用 add 可能会有所帮助(这样片段就不会被删除)。如果你能添加一些代码会很有帮助。你可以参考这个developer.android.com/guide/components/…
  • 是的,我正在使用替换方法。这是那个问题的原因吗?因为替换之前的片段在回来时必须再次经历创建状态?
  • @Piyush 你能告诉我怎么做吗?

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


【解决方案1】:

我不确定你用什么方法倒退。我认为这是因为您已经覆盖了 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();
   }

}

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    • 2016-08-21
    • 1970-01-01
    相关资源
    最近更新 更多