Можно ли заменить текущий просматриваемый фрагмент в FragmentStatePagerAdapter, не переходя сначала к другим страницам?

Мне удалось заменить фрагменты в FragmentStatePagerAdapter, но для его уничтожения требуется смахивание фрагмента и повторное создание другого фрагмента, таким образом заменяя фрагмент.

Что мне нужно, это заменить текущий просматриваемый фрагмент адаптера другим фрагментом без изменения текущего просматриваемого фрагмента.

Пример:

Страница1 Страница2 Страница3Страница4

Страница4 является активным фрагментом. Когда я щелкну что-то в Page4, это будет заменено другим фрагментом

Page1 Page2 Page3 Page3 Page3

fragmentDataSource[3] = page3Fragment;
adapter.notifyDataSetChanged();

Работает только из-за onChange() метод. (Грубое предположение)

Это возможно? Я рассмотрел использование FrameLayout и просто установил видимость макетов, но не думаю, что это будет лучшим выбором.

Спасибо!

1 ответ

Это не самый эффективный способ создания экземпляра фрагмента в ViewPager, но он самый простой:

public int getItemPosition(Object object) {
   return POSITION_NONE;
}

Или создайте метод во фрагменте и вызовите его, если фрагмент имеет правильный тег:

@Override
        public Fragment getItem(int position) {         
            if (position == some position) {
                YourFragment myFragment = YourFragment.newInstance(someObject);
                myFragment.setmTag("some tag");
                return myFragment;
            }
            //some code

}

@Override
        public int getItemPosition(Object object) {
            YourFragment frag = ((YourFragment) object);
            if (frag.getmTag()!="some tag") {
                ((YourFragment) object).update(someObject);

            }

            return super.getItemPosition(object);
        } 
Другие вопросы по тегам