class ViewPagerAdapter(manager: FragmentManager) : FragmentStatePagerAdapter(manager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) { var productsHome: ProductsFragment? = null var productsCategories: ProductsFragment? = null var categories: CategoriesFragment? = null var home: HomeFragment? = null override fun getItem(pos: Int): Fragment { return when (pos) { CurrentFragment.PROFILE -> ProfileFragment() CurrentFragment.CATEGORIES -> { if (categoriesProductsMode) { if (productsCategories == null) { productsCategories = ProductsFragment() } productsHome as Fragment } else { if (categories == null) { categories = CategoriesFragment() } categories as Fragment } } CurrentFragment.FAVORITES -> FavoritesFragment() else -> { if (homeProductsMode) { if (productsHome == null) { productsHome = ProductsFragment() } productsHome as Fragment } else { if (home == null) { home = HomeFragment() } home as Fragment } } } } override fun getCount(): Int { return 4 } override fun getItemPosition(obj: Any): Int { return if (obj is HomeFragment || obj is ProductsFragment) { PagerAdapter.POSITION_NONE } else { super.getItemPosition(obj) } } override fun instantiateItem(container: ViewGroup, position: Int): Any { val fragment = super.instantiateItem(container, position) if (fragment is HomeFragment) { home = fragment fragment.callback = this@MainActivity } if(fragment is CategoriesFragment) { categories = fragment fragment.callback = this@MainActivity } if(fragment is ProductsFragment) { fragment.callback = this@MainActivity if(position == 0) { productsHome = fragment homeProductsMode = true } else { productsCategories = fragment categoriesProductsMode = true } } return fragment } }