我有一个"活动",包含一个带有给定导航图的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,但addFragmentOnAttachListener
API仅在片段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'