Я не могу вызвать элемент instantiateItem в FragmentStateAdapter для viewPager2

Когда я переключился на viewPager2, мне пришлось реализовать другой тип адаптера (я использовал FragmentPagerAdapter, а теперь я использую FragmentStateAdapter), теперь я хочу вызвать элемент instantiateItem, у которого был старый адаптер, но он не отображается в новом.

public void onPageChange(int position) {
    //I cannot call instantiateItem from pagerAdapter
    Object object = pagerAdapter.instantiateItem(mMainViewPager,position);
    if (object instanceof MapFragment) {
        MapFragment fragment = (MapFragment) object;
        //fragment.setDevice(mDevice);
        //fragment.setLastTracking();
    }
    if (object instanceof DevicesFragment) {
        DevicesFragment fragment = (DevicesFragment) object;
        //fragment.refresh();
    }
}

person Mario Ortegon    schedule 13.09.2019    source источник
comment
Вы проверили документы для FragmentStateAdapter?   -  person Mike M.    schedule 14.09.2019
comment
Я в той же ситуации и задаюсь вопросом, какая альтернатива instantiateItem для FragmentStateAdapter для работы с viewPager2. Как было предложено @MikeM., Я проверил документы, но не нашел ничего полезного.   -  person waseefakhtar    schedule 19.12.2019


Ответы (1)


Мне не удалось найти тот же метод, который имеет ту же функциональность с элементом instiateItem, хотя многие пытались использовать пейджер представления 2. Вместо этого я создал список фрагментов, который принимает элемент фрагментов пейджера представления. Вы можете спросить, где вы поместили их в этот список. Когда класс адаптера состояния фрагмента вызывает метод createFragment (), я вставляю его в список, а затем с помощью метода get из фрагмента хоста

person Enes Zor    schedule 06.05.2020
comment
Это не звучит как хорошее решение без удаления фрагментов из этого списка. RecyclerView.Adapter.onViewRecycled (VH) может быть хорошей отправной точкой для удаления. - person Dominikus K.; 29.03.2021