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