Моя MainActivity содержит viewPager.
В MainActivity.java я установил адаптер для viewpager. Адаптер расширяет FragmentStatePagerAdapter. Фрагмент, который я хочу заменить, — это cameraFragment. Поэтому, когда пользователь нажимает кнопку переключения камеры, я хочу теперь показать фрагмент камеры, на этот раз с включенной фронтальной камерой.
Нажав кнопку переключения камеры, я удаляю фрагмент из массива фрагментов, которые я передал пользовательскому адаптеру. Я добавляю новый фрагмент и вызываю notifydatasetchanged. Однако это не приводит к добавлению нового фрагмента. Как добиться динамической замены фрагментов в пейджере просмотра, который поддерживается моим настраиваемым адаптером пейджера состояния фрагмента? Код :
mainPageFragments = new ArrayList<>();
mainPageFragments.add(new ResultsFragment_());
mainPageFragments.add(DemoCameraFragment_.newInstance(false));
pagerAdapter = new MainViewPagerAdapter(getSupportFragmentManager(),mainPageFragments);
Чтобы заменить фрагмент: при получении соответствующего события я делаю,
mainPageFragments.remove(1);
if (event.getCameraState().equals(CameraSwitchButton.CameraTypeEnum.BACK)) {
mainPageFragments.add(DemoCameraFragment.newInstance(false));
} else {
mainPageFragments.add(DemoCameraFragment.newInstance(true));
}
// Not Working...
pagerAdapter.notifyDataSetChanged();
Код адаптера:
public class MainViewPagerAdapter extends FragmentStatePagerAdapter {
ArrayList<Fragment> fragmentsArray;
public MainViewPagerAdapter(FragmentManager fm, ArrayList<Fragment> fragmentsArray) {
super(fm);
this.fragmentsArray = fragmentsArray;
}
@Override
public Fragment getItem(int position) {
return fragmentsArray.get(position);
}
@Override
public int getCount() {
return fragmentsArray.size();
}
@Override
public int getItemPosition(Object object) {
return super.getItemPosition(object);
}
}