如何通知 Activity NavHostFragment 子片段附件

How an Activity can be notified of NavHostFragment child fragments attachement

我有一个 Activity,其中包含带有给定导航图(和经典子片段)的 NavHostFragment。我的子片段可能会触发事件(通过接口声明),因此它们有一个方法 setXXXlistener(Interface) 来注册一个实现接口的监听器。

那是可以实现接口的Activity(因为它知道对事件做什么)。

为此,我希望在显示子片段时调用 Activity.onAttachFragment 方法,以便执行类似 :

的操作
public void onAttachFragment(@NonNull Fragment fragment)
{
    super.onAttachFragment(fragment);
    if( fragment instanceof OneOfMyFragment)
    {
        ((OneOfMyFragment)fragment).setXXXListener(this);
    }
}

但事实并非如此; onAttachFragment 使用 NavHostFragment 参数调用一次。

所以我查看了 NavHostFragment,解决方案可能是使用 NavHostFragment.getChildFragmentManager() 其中 returns 一个 FragmentManager,然后我可以做 FragmentManager.addFragmentOnAttachListener(listener),所以我会可以自己注册。

问题是:FragmentManager.addFragmentOnAttachListener好像是documented,但在源文件中没有定义! (至少AndroidStudio不知道不会编译)

在我的 gradle 文件中,我目前有这些版本(但也尝试使用 API 30):

compileSdkVersion 29
buildToolsVersion "29.0.2"

targetSdkVersion 29

implementation 'androidx.navigation:navigation-fragment:2.3.2'
implementation 'androidx.navigation:navigation-ui:2.3.2'

有什么想法吗? (达到我的目的,或者解决未定义的错误)

androidx.navigation:navigation-fragment:2.3.2 仅依赖于 Fragment 1.2.4,但 addFragmentOnAttachListener API 仅在 Fragment 1.3.0-alpha06 中添加。因此,如果你想使用那个新的 API:

,你需要专门添加对 Fragment 1.3 版本(当前为 1.3.0-rc01)的依赖
implementation 'androidx.navigation:navigation-fragment:2.3.2'
implementation 'androidx.navigation:navigation-ui:2.3.2'

// Add this line
implementation 'androidx.fragment:fragment:1.3.0-rc01'