Подтвердить что ты не робот

Присоединение к жизненному циклу фрагментов, например Application.ActivityLifecycleCallbacks

В Android, если у вас есть контекст приложения, вы можете зарегистрировать экземпляр Application.ActivityLifecycleCallbacks, который будет вызываться каждый раз, когда Activity выполняет один из своих обратных вызовов жизненного цикла.

Как я могу сделать то же самое для фрагментов? Я думаю, что нет такого интерфейса для Фрагментов и ясного места, где я бы добавил это.

Возможно ли настроить FragmentHostCallback создание FragmentController, но как я могу подключить его для всего приложения?

Вариант использования - это библиотека, которая должна быть уведомлена каждый раз, когда фрагмент вызывает свои обратные вызовы жизненного цикла, и я не хочу создавать BaseFragment. Я хочу, чтобы его вызывали только из приложения onCreate и что он (если возможно...).

EDIT:

Я создал проблему в Android Open Source Project об этом.

4b9b3361

Ответ 1

Поскольку версия 25.2.0 библиотеки поддержки Android, класс FragmentManager.FragmentLifecycleCallbacks является статичным и доступным для всех.

Теперь мы можем использовать экземпляр этого класса и зарегистрировать его в supportFragmentManager Activity.

public class ExampleActivity extends AppCompatActivity {

     public void onCreate(Bundle savedInstaceState) {

           // initialization code
          getSupportFragmentManager()
            .registerFragmentLifecycleCallbacks(new FragmentManager.FragmentLifecycleCallbacks() {
                @Override
                public void onFragmentPreAttached(FragmentManager fm, Fragment f, Context context) {
                    super.onFragmentPreAttached(fm, f, context);
                }

                @Override
                public void onFragmentAttached(FragmentManager fm, Fragment f, Context context) {
                    super.onFragmentAttached(fm, f, context);
                }

                @Override
                public void onFragmentCreated(FragmentManager fm, Fragment f, Bundle savedInstanceState) {
                    super.onFragmentCreated(fm, f, savedInstanceState);
                }

                @Override
                public void onFragmentActivityCreated(FragmentManager fm, Fragment f, Bundle savedInstanceState) {
                    super.onFragmentActivityCreated(fm, f, savedInstanceState);
                }

                @Override
                public void onFragmentViewCreated(FragmentManager fm, Fragment f, View v, Bundle savedInstanceState) {
                    super.onFragmentViewCreated(fm, f, v, savedInstanceState);
                }

                @Override
                public void onFragmentStarted(FragmentManager fm, Fragment f) {
                    super.onFragmentStarted(fm, f);
                }

                @Override
                public void onFragmentResumed(FragmentManager fm, Fragment f) {
                    super.onFragmentResumed(fm, f);
                }

                @Override
                public void onFragmentPaused(FragmentManager fm, Fragment f) {
                    super.onFragmentPaused(fm, f);
                }

                @Override
                public void onFragmentStopped(FragmentManager fm, Fragment f) {
                    super.onFragmentStopped(fm, f);
                }

                @Override
                public void onFragmentSaveInstanceState(FragmentManager fm, Fragment f, Bundle outState) {
                    super.onFragmentSaveInstanceState(fm, f, outState);
                }

                @Override
                public void onFragmentViewDestroyed(FragmentManager fm, Fragment f) {
                    super.onFragmentViewDestroyed(fm, f);
                }

                @Override
                public void onFragmentDestroyed(FragmentManager fm, Fragment f) {
                    super.onFragmentDestroyed(fm, f);
                }

                @Override
                public void onFragmentDetached(FragmentManager fm, Fragment f) {
                    super.onFragmentDetached(fm, f);
                }
            }, true);
       }
}

Ответ 2

Хорошо, что активность отправляет свои обратные вызовы для FragmentManager. Позже диспетчер фрагментов отправляет вызовы в Фрагмент. В FragmentManager нет места для регистрации FragmentLifeCycleCallback. Однако в любое время после инициализации фрагмента u может получить состояние фрагмента из переменной mState в фрагменте. вы можете отслеживать только стопку в диспетчере фрагментов, как показано ниже:

        final FragmentManager fragmentManager = getSupportFragmentManager();
    fragmentManager.addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
        @Override
        public void onBackStackChanged() {
            Log.i("BACKSTACK","Count" +fragmentManager.getBackStackEntryCount());
        }
    });

надеюсь, что это поможет.