Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get previous fragments?

In order to reuse some fragments in my app, I need to know which Fragment is the second on the back stack.

In order to do that I'm using getFragmentManager().getFragments(), which shows the following error (but works!)

FragmentManager.getFragments can only be called from within the same library group (groupId=com.android.support)

Is it safe to use? Could I get the same result by another approach?

Here is the code:

public Fragment getCallerFragment(){
    List<Fragment> fragments = getFragmentManager().getFragments();
    return fragments.get(fragments.size()-2);
}
like image 453
kike Avatar asked Sep 20 '17 14:09

kike


3 Answers

If we put both answers together, you can add TAG's to your fragments and get the previous Fragment name with this method:

private String getCallerFragment(){
        FragmentManager fm = getFragmentManager();
        int count = getFragmentManager().getBackStackEntryCount();
        return fm.getBackStackEntryAt(count - 2).getName();
    }
like image 170
Knyhuus Avatar answered Oct 11 '22 22:10

Knyhuus


Use this method to get the number of counts in backStack

getBackStackEntryCount()

use this method to get the fragments

getBackStackEntryAt (int index)

you can also do something like

FragmentManager fm = getFragmentManager();

for(int entry = 0; entry < fm.getBackStackEntryCount(); entry++){
   Log.i(TAG, "Found fragment: " + fm.getBackStackEntryAt(entry).getId());
}
like image 20
Nouman Ch Avatar answered Oct 11 '22 23:10

Nouman Ch


You can also put tag's / id's to fragments and get them by id

val fragment = supportFragmentManager.findFragmentByTag(tag)

else Nouman Ch solution will work for you.

like image 4
Arutha Avatar answered Oct 12 '22 00:10

Arutha