How do I get the currently displayed fragment?

前端 未结 30 2290
青春惊慌失措
青春惊慌失措 2020-11-22 11:21

I am playing with fragments in Android.

I know I can change a fragment by using the following code:

FragmentManager fragMgr = getSupportFragmentManag         


        
30条回答
  •  再見小時候
    2020-11-22 11:41

    You can do it very easily also with a URL in logcat which will redirect you to the source code of current fragment source code. First, you need to add an OnBackStackChangedListener in host activity like -

    activity.getChildFragmentManager().addOnBackStackChangedListener(backStackListener);
    

    And the OnBackStackChangedListener implementation is -

        public FragmentManager.OnBackStackChangedListener backStackListener = () -> {
    
        String simpleName = "";
        String stackName = getStackTopName().trim();
    
        if (Validator.isValid(stackName) && stackName.length() > 0) {
    
          simpleName = stackName.substring(Objects.requireNonNull(stackName).lastIndexOf('.') + 1).trim();
    
          List
           fragmentList = getChildFragmentManager().getFragments();
          Fragment myCurrentFragment;
    
          for (int i = 0; i < fragmentList.size(); i++) {
           myCurrentFragment= fragmentList.get(i);
           if (myCurrentFragment.getClass().getSimpleName().equals(simpleName)) {
            //Now you get the current displaying fragment assigned in myCurrentFragment.
            break;
           }
           myFragment = null;
          }
         }
    
    
         //The code below is for the source code redirectable logcat which would be optional for you.
         StackTraceElement stackTraceElement = new StackTraceElement(simpleName, "", simpleName + ".java", 50);
         String fileName = stackTraceElement.getFileName();
         if (fileName == null) fileName = "";
         final String info = "Current Fragment is:" + "(" + fileName + ":" +
         stackTraceElement.getLineNumber() + ")";
         Log.d("now", info + "\n\n");
        };
    

    And the getStackTopName() method is -

    public String getStackTopName() {
        FragmentManager.BackStackEntry backEntry = null;
        FragmentManager fragmentManager = getChildFragmentManager();
        if (fragmentManager != null) {
            if (getChildFragmentManager().getBackStackEntryCount() > 0)
                backEntry = getChildFragmentManager().getBackStackEntryAt(
                        getChildFragmentManager().getBackStackEntryCount() - 1
                );
        }
        return backEntry != null ? backEntry.getName() : null;
    }
    

提交回复
热议问题