返回

导航主activity获取fragment实例的详细步骤与讲解

Android

导航的主activity中要获取fragment的实例,首先我们可以通过获取到navHostFragment实例,而我们想要获取的fragment实例是在navHostFragment中的。在具体操作上,我们有两种方案可以选择:

  1. 使用findFragmentById()方法

    NavHostFragment navHostFragment = 
    (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment);
    Fragment fragment = navHostFragment.getChildFragmentManager().findFragmentById(R.id.fragment);
    
  2. 使用getChildFragmentManager()方法

    FragmentManager childFragmentManager = getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment).getChildFragmentManager();
    Fragment fragment = childFragmentManager.findFragmentById(R.id.fragment);
    

无论使用哪种方案,都能够顺利地获取到fragment实例。但是,我们还需要注意一个问题:如果当前fragment没有被添加到视图中,那么通过以上两种方式是无法获取到fragment实例的。为了避免出现这种情况,我们可以使用getChildFragmentManager().getFragments()方法来获取所有已经添加到视图中的fragment实例。

   FragmentManager childFragmentManager = getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment).getChildFragmentManager();
   List<Fragment> fragments = childFragmentManager.getFragments();
   for (Fragment fragment : fragments) {
       if (fragment instanceof MyFragment) {
           // do something with fragment
       }
   }

至此,关于navigation主activity获取fragment实例的详细步骤与讲解就介绍完了。希望对大家有所帮助!