getSupportFragmentManager()。findFragmentByTag()找不到正确的片段

我将我的应用程序从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完美兼容,一切都毁了。有人可以帮忙吗?

jianggang158 回答:getSupportFragmentManager()。findFragmentByTag()找不到正确的片段

我也发生了同样的问题。就我而言,此问题是由于以下库引起的:

androidx.appcompat:appcompat:1.1.0

将此库降级到androidx.appcompat:appcompat:1.0.0。这可能会解决您的交易问题。我不确定这是否是库中的错误,或者我没有在appcompat:1.1.0发行说明中找到任何特定说明,所以他们进行了任何改进。

本文链接:https://www.f2er.com/3126030.html

大家都在问