如何通知活动NavHostFragment子片段附加



我有一个"活动",包含一个带有给定导航图的NavHostFragment(以及经典子片段(。我的子片段可能会触发事件(通过接口声明(,因此它们有一个方法setXXXlistener(interface(来注册实现接口的listener。

这就是可能实现接口的"活动"(因为它知道如何处理事件(。

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

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

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

所以我研究了NavHostFragment,解决方案可能是使用NavHostFraction.getChildFragmentManager((,它返回一个FragmentManager,然后我可以做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'

知道吗?(为了实现我的目标,或解决未定义的错误(

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

最新更新