如何通知 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'
我有一个 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:
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'