Ответ 1
В FragmentPagerAdapter сохраняются дополнительные фрагменты, кроме показанного в возобновленном состоянии. Решение заключается в реализации пользовательского OnPageChangeListener и создании нового метода для отображения фрагмента.
1) Создание интерфейса LifecycleManager Интерфейс будет иметь два метода, и каждый фрагмент ViewPagers будет реализовывать его. Эти методы:
public interface FragmentLifecycle {
public void onPauseFragment();
public void onResumeFragment();
}
2) Пусть каждый Фрагмент реализует интерфейс Добавить оператор ций для каждого объявления класса:
public class FragmentBlue extends Fragment implements FragmentLifecycle
public class FragmentGreen extends Fragment implements FragmentLifecycle
public class FragmentPink extends Fragment implements FragmentLifecycle
3) Внедрить методы интерфейса в каждом фрагменте Чтобы проверить, что он действительно работает, как ожидается, я просто зарегистрирую вызов метода и покажут Toast:
@Override
public void onPauseFragment() {
Log.i(TAG, "onPauseFragment()");
Toast.makeText(getActivity(), "onPauseFragment():" + TAG, Toast.LENGTH_SHORT).show();
}
@Override
public void onResumeFragment() {
Log.i(TAG, "onResumeFragment()");
Toast.makeText(getActivity(), "onResumeFragment():" + TAG, Toast.LENGTH_SHORT).show();
}
4) Методы интерфейса вызова на изменении страницы ViewPager Вы можете установить OnPageChangeListener на ViewPager и получить обратный вызов каждый раз, когда ViewPager показывает другую страницу:
pager.setOnPageChangeListener(pageChangeListener);
5) Внедрите OnPageChangeListener для вызова ваших пользовательских методов жизненного цикла
Listener знает новую позицию и может вызывать метод интерфейса на новом фрагменте с помощью PagerAdapter. Здесь я могу вызвать onResumeFragment() для нового фрагмента и onPauseFragment() для текущего.
Мне нужно также сохранить текущую позицию фрагментов (изначально текущая позиция равна 0), так как я не знаю, прокручивал ли пользователь слева направо или справа налево. Посмотрите, что я имею в виду в коде:
private OnPageChangeListener pageChangeListener = new OnPageChangeListener() {
int currentPosition = 0;
@Override
public void onPageSelected(int newPosition) {
FragmentLifecycle fragmentToShow = (FragmentLifecycle)pageAdapter.getItem(newPosition);
fragmentToShow.onResumeFragment();
FragmentLifecycle fragmentToHide = (FragmentLifecycle)pageAdapter.getItem(currentPosition);
fragmentToHide.onPauseFragment();
currentPosition = newPosition;
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) { }
public void onPageScrollStateChanged(int arg0) { }
};
Я не писал код. Полный учебник здесь: http://looksok.wordpress.com/2013/11/02/viewpager-with-detailed-fragment-lifecycle-onresumefragment-including-source-code/