Я лично попробовал многие из этих решений и в итоге получил это рабочее решение:
Добавьте этот метод утилиты, который будет использоваться несколько раз ниже, чтобы получить количество фрагментов в вашем backstack:
protected int getFragmentCount() {
return getSupportFragmentManager().getBackStackEntryCount();
}
Затем, когда вы добавляете / заменяете свой фрагмент, используя метод FragmentTransaction, генерируйте уникальный тег для вашего фрагмента (например, используя количество фрагментов в вашем стеке):
getSupportFragmentManager().beginTransaction().add(yourContainerId, yourFragment, Integer.toString(getFragmentCount()));
Наконец, выможете найти любой из ваших фрагментов в вашем backstack с помощью этого метода:
private Fragment getFragmentAt(int index) {
return getFragmentCount() > 0 ? getSupportFragmentManager().findFragmentByTag(Integer.toString(index)) : null;
}
Таким образом, получить верхний фрагмент в вашем backstack можно легко, вызвав:
protected Fragment getCurrentFragment() {
return getFragmentAt(getFragmentCount() - 1);
}
Надеюсь, это поможет!