У меня есть несколько фрагментов, которые организованы с ViewPager
. Я добавляю addOnPageChangeListener
к ViewPager
в методе MainActivity onCreate
, который дает позицию выбранного фрагмента.
Несмотря на то, что я предотвращаю разрушение фрагментов, указав setOffscreenPageLimit
, я до сих пор не выяснил, как получить доступ к фрагментам из MainActivity, так как простое использование findViewById
возвращает исключения нулевого объекта.
Что я хочу сделать:
Я хотел бы получить доступ к элементам фрагментов, например, макеты и прокрутки в OnPageListener
из ViewPager
:
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int i) {
if(i == 0) {
// Do something with the first fragment.
} else if(i == 1) {
// Do something with the second fragment.
}
}
}
ViewPager
использует FragmentPagerAdapter
:
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return Fragment1.newInstance(position);
case 1:
return Fragment2.newInstance(position);
case 2:
return Fragment3.newInstance(position);
case 3:
return Fragment4.newInstance(position);
default:
throw new IllegalArgumentException();
}
}
@Override
public int getCount() {
return 4;
}
}
Что добавляется так:
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
mViewPager.setAdapter(mSectionsPagerAdapter);
~
Или я должен изменить свой подход?
Если доступ к фрагментам не может быть достигнут с помощью этой схемы, каким может быть эффективный альтернативный маршрут?
Я пытался реализовать ViewPager.onPageChangeListener
в пользовательском ViewPager
, но это не очень хороший вариант.
Я мог бы разобраться с элементами в их соответствующих фрагментах, но это утомительный процесс, который сложно поддерживать, поэтому я ищу способ обрабатывать их одновременно.
Я знаю, что подобные вопросы задавались ранее, но я не нашел в них решения.