我已经阅读了很多关于保存状态和碎片的内容,但我无法绕过它。
当用户登录时,我有一个加载的片段。然后,用户可以从各种类别中进行选择,这些类别将用新的片段替换当前片段。在这个新片段中,用户可以单击GridView
中的项目,这将导致检查显示。
当我按下后退按钮时,我该如何保存点击的项目? onSavedInstanceState
永远不会被称为,当我尝试导航回来时,似乎我的片段正在重新创建。
一些代码:
当用户首次进入应用
时// creates the home fragment
Fragment homeFragment = new HomeFragment();
FragmentTransaction fragmentTransaction =
getSupportFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.content_frame, homeFragment);
fragmentTransaction.commit();
当用户点击某个类别
时Bundle bundle = new Bundle();
bundle.putSerializable("subCategory", subCategory);
Fragment ingredientsFragment = new IngredientsFragment();
ingredientsFragment.setArguments(bundle);
FragmentTransaction fragmentTransaction =
getActivity().getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.content_frame, ingredientsFragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
答案 0 :(得分:0)
当您从HomeFragment移动到IngredientsFragment时,您正在将1个片段替换为另一个片段(HomeFragment By IngredientsFragment),因此当您从IngredientsFragment按回来时,它也将从堆栈中移除IngredientsFragment,并且HomeFragment已被删除,这是预期的行为。
你可以做的是当你调用IngredientsFragment Fragment然后“添加”它不被替换,当用户按下然后从堆栈中删除IngredientsFragment时。