ViewPager ведет себя так, потому что fragmentStatePagerAdapter сохраняет свои представления. При первом запуске вы всегда увидите, что onCreateView () вызывается для фрагмента n + 1. Но если вы прокрутили все фрагменты, их представления уже находятся в FragmentStatePagerAdapter. Конечно, может случиться так, что PagerAdapter уничтожит некоторые представления (и фрагмент) по причинам, связанным с управлением памятью.
Предположим, что это происходит: фрагмент X уничтожается. Итак, если вы проводите пальцем по фрагментам, и вы находитесь на фрагменте Y, фрагмент X находится в вашем offscreenpagelimit. FragmentStatePagerAdapter заметит, что доступного фрагмента нет, и создаст его заново. В этом случае onCreateView () будет вызван снова.
Если вы хотите предварительно загрузить состояние, которое было до того, как фрагмент был уничтожен, вам необходимо использовать обратный вызов onSaveInstanceState ().
Вот пример:
чтобы сохранить состояние Фрагмента:
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Log.v(TAG, "In frag's on save instance state ");
outState.putSerializable("starttime", startTime); //saves the object variable
}
для восстановления состояния:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Log.v(TAG, "In frag's on create view");
View view = inflater.inflate(R.layout.fragment_data_entry, container,
false);
timeTV = (TextView) view.findViewById(R.id.time_tv);
if ((savedInstanceState != null)
&& (savedInstanceState.getSerializable("starttime") != null)) {
startTime = (Calendar) savedInstanceState
.getSerializable("starttime");
}
return view;
}
Этот код взят из здесь . Вы можете получить больше информации об этом на этом сайте.
person
Paul Reznik
schedule
04.06.2015