首页 > 解决方案 > 如何通知 Activity NavHostFragment 子片段附件

问题描述

我有一个活动,包含一个带有给定导航图(和经典子片段)的 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,解决方案可能是使用返回 FragmentManager 的 NavHostFragment.getChildFragmentManager(),然后我可以执行 FragmentManager.addFragmentOnAttachListener(listener),这样我就可以自己注册了。

问题是: FragmentManager.addFragmentOnAttachListener 似乎已记录在案,但未在源文件中定义!(至少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'

任何的想法 ?(实现我的目标,或解决未定义的错误)

标签: androidandroid-fragmentsandroid-architecture-navigation

解决方案


androidx.navigation:navigation-fragment:2.3.2仅依赖于 Fragment 1.2.4,但addFragmentOnAttachListenerAPI 仅在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'

推荐阅读