向 FragmentContainerView 添加子片段后 UI 为空白

问题描述 投票:0回答:1

我确实需要帮助解决我已经困扰了一段时间的问题。几个月前我加入了我的公司。自从迁移 Android 应用程序以来,我一路上面临着许多挑战(主要是由于需要替换或更新代码)。

我最近遇到的问题之一是 FragmentContainerView 的使用。过去该项目非常混乱,现在的目标是简化并提高其性能。这从这里开始。

我的项目有一个 MainActivity。这是启动活动。然后我将另一个片段添加到 Activity 的 FragmentContainerView 中。然后在第一个子片段中,我将有一个选项卡布局,然后添加另一个子片段。

这是主要活动中的:

<androidx.fragment.app.FragmentContainerView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/mxb_fragment_container" />

当主 Activity 第一次加载时,在 onCreate() 内,我将有一个名为

initHomeFragment()
的函数来添加主屏幕。这个没有任何问题。我分享这个只是为了了解我所面临的问题的更多背景。

当我尝试添加下一个片段(由点击的按钮触发)时,发生了一件非常有趣的事情(经过反复观察):

  1. (调试模式)当我在调试模式下运行应用程序时,后续的子片段(具有子视图的片段)将加载。

  2. (正常模式)当我停止调试并在正常的“运行”模式下运行应用程序时,子片段将不再加载。我只是得到一个空白屏幕。我什至尝试创建一个在加载选项卡相关片段结束时调用的函数。

    FragmentContainerView
    将显示有 2 个孩子。这是正确的,因为现在已将主页和收藏夹片段添加到容器中。

private void switchFragmentView(Fragment pShowFragment, Fragment pHideFragment, Bundle args, String tag) {
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.setReorderingAllowed(true);
    if (pHideFragment != null) {
        ft.hide(pHideFragment);
    }
        
    if (getSupportFragmentManager().findFragmentByTag(tag) == null) {
        if (pShowFragment instanceof MxFavouritesFragment)
            ft.add(R.id.mxb_fragment_container, MxFavouritesFragment.class, args, tag);
    } else {
        ft.show(pShowFragment);
    }
        
    ft.commit();
}

里面

MxFavouritesFragment
...

getChildFragmentManager()
    .beginTransaction()
    .replace(R.id.mxb_fav_main_container, RecentFavouritesFragment.class, null, RecentFavouritesFragment.LOG_TAG)
    .commit();

MxFavouritesFragment
内部,我使用
FrameLayout
而不是
FragmentContainerView
。我尝试在这里使用相同的容器视图,但效果不佳。

我该怎么做才能确保 UI 正确加载并且不出现空白屏幕?

我按照一些在线提示使用

invalidate()
requestLayout()
函数,这应该强制容器重新绘制自身。但由于某种原因,它似乎没有做任何事情(据我所知)。

java android
1个回答
0
投票

这不是答案。由于我没有足够的声誉来发表评论,因此我将其发布为答案。一旦你看到这个,请回复这个答案/编辑问题,以便我可以删除它

我想告诉您分享一个可以重现此问题的示例项目

© www.soinside.com 2019 - 2024. All rights reserved.