我将我的应用程序从SDK 26升级到了SDK 28,这破坏了我应用程序的导航。我有一个中心选项卡式活动。在每个选项卡中,应用程序的流程均由片段管理。我以显示当前选项卡上一个片段的方式实现了后按。后按代码是:
public void onBackpressed() {
String name = fragmentManager.getBackStackEntryAt(
fragmentManager.getBackStackEntryCount() - 1).getName();
Fragment fragment = fragmentManager.findFragmentByTag(name);
String tag = ((AppFragment) fragment).getPreceddingFragmentTag();
Fragment frag = fragmentManager.findFragmentByTag(tag);
removeFragment(fragment);
replaceFragment(frag,tag);
}
我将当前片段的标记传递到其构造函数中的下一个标记,然后由上述代码中的getPreceddingFragmentTag()
方法将其提取。
我使用一种方法在屏幕上显示新片段,并在按下返回键时将其删除。这是该代码:
private void replaceFragment(Fragment fragment,String tag) {
loadedFragment = (AppFragment) fragment;
fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(mContainerId,fragment,tag);
fragmentTransaction.addToBackStack(tag);
fragmentTransaction.commit();
invalidateOptionsMenu();
}
我维护后退堆栈,以跟踪事务并在用户按下时获取当前显示的片段。 删除片段的方法是:
private void removeFragment(Fragment fragment) {
fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.remove(fragment);
fragmentTransaction.commit();
}
我的应用程序通过以下方式工作: 该选项卡将打开一个片段,其中包含一个列表,单击该条目后,用户可以将其转到下一个片段。这也是一个列表,点击列表中的某个项目会将用户带到该项目的详细信息片段。
问题出在这里
我从第一个片段到下一个片段,然后到项目详细信息,然后返回。第一次就能完美运行。
我点击第一个片段中列表上的另一个项目,它完美地显示了下一个片段,我点击了一个项目以获取详细信息,然后按返回。它没有显示应该显示的片段,而是显示了上一个流程中显示的片段。
我已经在 stackoverflow ,中和 Google Developers Documentation 上日日夜夜破坏了,没有找到解决方案。我的应用与SDK 26和28完美兼容,一切都毁了。有人可以帮忙吗?