Как получить предыдущие фрагменты?

Чтобы повторно использовать некоторые фрагменты в моем приложении, мне нужно знать, какой фрагмент является вторым в заднем стеке.

Для этого я использую getFragmentManager().getFragments(), который показывает следующую ошибку (но работает!)

FragmentManager.getFragments можно вызывать только из той же группы библиотек (groupId=com.android.support)

Безопасно ли использовать? Могу ли я получить тот же результат другим способом?

Вот код:

public Fragment getCallerFragment(){
    List<Fragment> fragments = getFragmentManager().getFragments();
    return fragments.get(fragments.size()-2);
}

person kike    schedule 20.09.2017    source источник


Ответы (3)


Если мы объединим оба ответа, вы можете добавить TAG к своим фрагментам и получить предыдущее имя фрагмента с помощью этого метода:

private String getCallerFragment(){
        FragmentManager fm = getFragmentManager();
        int count = getFragmentManager().getBackStackEntryCount();
        return fm.getBackStackEntryAt(count - 2).getName();
    }
person Knyhuus    schedule 21.09.2017

Используйте этот метод, чтобы получить количество отсчетов в backStack

getBackStackEntryCount()

используйте этот метод, чтобы получить фрагменты

getBackStackEntryAt (внутренний индекс)

вы также можете сделать что-то вроде

FragmentManager fm = getFragmentManager();

for(int entry = 0; entry < fm.getBackStackEntryCount(); entry++){
   Log.i(TAG, "Found fragment: " + fm.getBackStackEntryAt(entry).getId());
}
person Nouman Ch    schedule 20.09.2017

Вы также можете поместить теги / идентификаторы во фрагменты и получить их по идентификатору

val fragment = supportFragmentManager.findFragmentByTag(tag)

иначе решение Nouman Ch будет работать для вас.

person Arutha    schedule 20.09.2017