Только одна из многих проблем с фрагментами. Метод Activity.onCreate()
Я инициализирую ViewPager
с двумя Fragments
в нем.Второй фрагмент ViewPager еще не создан
viewPager = (ViewPager) findViewById(R.id.viewpager);
viewPager.setOffscreenPageLimit(1);
adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFragment(new AutoFragment(), getString(R.string.song_header_automatic));
adapter.addFragment(new ManualFragment(), getString(R.string.song_header_manual));
adapter.notifyDataSetChanged();
viewPager.setAdapter(adapter);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
После этого мне нужно выполнить действие на View
во втором Фрагмент ViewPager.
((Fragment) adapter.getItem(1)).getView().findViewById(...)
Но это дает NPE, так как пользователь никогда не просматривает второй фрагмент, поэтому он еще не был присоединен. Таким образом, доступ к элементу первого фрагмента не создает проблем.
Не следует setOffscreenPageLimit(1)
Способ подскажите Android, чтобы сделать также второй фрагмент?
Я также пытался не называть супер метод destroyItem
внутри адаптера, но не повезло, так как проблема в том, что фрагмент даже не инициализирован.
public class ViewPagerAdapter extends FragmentStatePagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {}
}
Как я могу заставить его также визуализировать невидимый фрагмент?
ПРИМЕЧАНИЕ: эта проблема возникает только для пользователей приложений, и я не могу ее воспроизвести. Только после того, как у меня возникла эта проблема, я думаю, что все это связано с выполнением ошибочной операции после правильного события жизненного цикла.
Просто попробуйте использовать 'FragmentPagerAdapter' вместо' FragmentStatePagerAdapter' –
@EduardoHerzer любая идея, почему это должно решить проблему? – fillobotto
проверить ответ ... слишком долго, чтобы быть комментарием –