android - 如何通知 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'
任何的想法 ?(实现我的目标,或解决未定义的错误)
解决方案
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'
推荐阅读
- clips - 剪辑我如何总结事实
- javascript - 正则表达式在 Javascript 中转换 URL
- javascript - 如果在angularjs表单中未定义对象,如何返回空白字符串
- mongodb - mongodb:在不区分大小写的索引上查找查询
- python - 从一个输入中解包值以进行整数处理?
- go - Echo 不能在 HTTPErrorHandler 中使用自定义上下文
- c# - 如何最好地为 C#monogame Visual Studio 创建经过时间的计时器和暂停状态
- php - 具有执行数组参数的灵活搜索选项
- c# - 为什么隐藏的重载正在编译?
- google-apps-script - Gmail 插件能否在侧边栏中始终可用?