У меня проблема, аналогичная описанной здесь: ViewPager отображает только последний фрагмент , но после попытки решить проблему у меня все еще остается та же проблема.
У меня есть приложение с TabLayout, которое отображает 3 фрагмента. 3 фрагмента имеют одинаковый макет, но содержимое (текст и т. Д.) Указанных макетов изменяется в зависимости от положения в TabLayout. Вкладка 1 отображает одну вещь, вкладка 2 - другую и т. Д. Я делаю это, передавая тот или иной класс фрагменту, который будет отображаться, в зависимости от позиции, переданной getItem () в адаптере пейджера.
Что я вижу, так это то, что независимо от того, какие фрагменты я пытаюсь загрузить, мой макет вкладки всегда будет отображать 3 экземпляра одного и того же фрагмента, в данном случае последний, который создается. Я прошел по коду и, конечно же, три различных фрагмента были созданы и возвращены в getItem () трижды вызванным, но только тот, который был возвращен последним, устанавливается на TabLayout 3 раза.
Как я могу заставить его отображать 3 разных фрагмента, а не один и тот же 3 раза?
Используемый код:
@Override
public Fragment getItem(int position) {
MyFragment fragment = new MyFragment();
if (position == 0) {
fragment = MyFragment.newInstance(MyClass1, position); // this gets returned first
} else if (position == 1){
fragment = MyFragment.newInstance(MyClass2, position); // this gets returned second
} else if (position == 2){
fragment = MyFragment.newInstance(MyClass3, position); // this gets returned third and is the only fragment displayed in the 3 tabs
}
return fragment;
}
Я считаю, что проблема должна быть где-то там, но скажите мне, если мне нужно поделиться / изменить другие части кода
РЕДАКТИРОВАТЬ : Это моя функция newInstance () в моем классе фрагментов
public static MarkStudentFragment newInstance(MyClass inputClass, int inputPosition) {
MyFragment fragment = new MyFragment();
dataClass = inputClass;
position = inputPosition;
return fragment;
}
dataClass затем используется для настройки макета фрагмента и т. Д.