FragmentStateAdapter не вызывает метод createFragment
Всем привет. У меня есть ViewPager2 и к нему адаптер. (FragmentStateAdapter) Адаптер выставляется в onViewCreated так:
fragmentPagerBinding.viewPager.adapter = adapter
Но вызова createFragment в адаптере не происходит. Почему так?
Фрагмент:
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
fragmentPagerBinding = FragmentPagerBinding.inflate(inflater)
return fragmentPagerBinding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
adapter = PageAdapter(this)
fragmentPagerBinding.viewPager.adapter = adapter
fragmentPagerBinding.viewPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
when (position) {
1 -> {
}
2 -> {
adapter?.updateServicesFragment()
}
}
super.onPageSelected(position)
}
})
fragmentPagerBinding.viewPager.let {
TabLayoutMediator(fragmentPagerBinding.tabLayout, it) { tab, position ->
when (position) {
0 -> {
val menu0Icon: Drawable? =
ResourcesCompat.getDrawable(
this.resources,
R.drawable.ic_car_color_blue, null
)
tab.text = requireContext().getString(R.string.main_menu)
tab.icon = menu0Icon
}
1 -> {
val menu1Icon: Drawable? =
ResourcesCompat.getDrawable(
this.resources,
R.drawable.menu1, null
)
tab.text = ""
tab.text = getString(R.string.history_menu)
tab.icon = menu1Icon
}
2 -> {
val menu2Icon: Drawable? =
ResourcesCompat.getDrawable(
this.resources,
R.drawable.services_2, null
)
tab.text = ""
tab.text = getString(R.string.services_menu)
tab.icon = menu2Icon
}
3 -> {
val menu3Icon: Drawable? =
ResourcesCompat.getDrawable(
this.resources,
R.drawable.ic_person, null
)
tab.text = ""
tab.text = getString(R.string.profile_menu)
tab.icon = menu3Icon
}
}
it.setCurrentItem(tab.position, true)
}.attach()
val resources = this.resources
fragmentPagerBinding.tabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab?) {
when (tab?.position) {
0 -> {
val menu0IconBlue: Drawable? =
ResourcesCompat.getDrawable(
resources,
R.drawable.ic_car_color_blue, null
)
disableTexts(fragmentPagerBinding.tabLayout, tab, getString(R.string.main_menu))
tab.icon = menu0IconBlue
}
1 -> {
val menu1IconBlue: Drawable? =
ResourcesCompat.getDrawable(
resources,
R.drawable.ic_history_blue, null
)
disableTexts(fragmentPagerBinding.tabLayout, tab, getString(R.string.history_menu))
tab.icon = menu1IconBlue
}
2 -> {
val menu2IconBlue: Drawable? =
ResourcesCompat.getDrawable(
resources,
R.drawable.ic_servises_blue, null
)
disableTexts(fragmentPagerBinding.tabLayout, tab, getString(R.string.services_menu))
tab.icon = menu2IconBlue
}
3 -> {
val menu3IconBlue: Drawable? =
ResourcesCompat.getDrawable(
resources,
R.drawable.ic_person_blue, null
)
disableTexts(fragmentPagerBinding.tabLayout, tab, getString(R.string.profile_menu))
tab.icon = menu3IconBlue
}
}
}
override fun onTabUnselected(tab: TabLayout.Tab?) {
}
override fun onTabReselected(tab: TabLayout.Tab?) {
}
})
try{
val profilePosition = requireArguments().getInt(Constants.POSITION)
fragmentPagerBinding.viewPager.postDelayed({
fragmentPagerBinding.viewPager.currentItem = profilePosition
}, 1)
} catch (e: IllegalStateException)
{
Timber.d("")
}
}
val onBackPressedCallback: OnBackPressedCallback = object : OnBackPressedCallback(
true // default to enabled
) {
override fun handleOnBackPressed() {
Timber.d("main back pressed")
}
}
val lifecycleOwner: LifecycleOwner = this
requireActivity().onBackPressedDispatcher.addCallback(
lifecycleOwner, // LifecycleOwner
onBackPressedCallback
)
}
Адаптер:
class PageAdapter(fragment: Fragment)
: FragmentStateAdapter(fragment) {
private lateinit var fragment:Fragment
private val servicesFragment: ServicesFragment = ServicesFragment()
override fun getItemCount(): Int {
return 4
}
override fun createFragment(position: Int): Fragment {
when(position){
0 -> fragment = ProfileFragment()
1 -> fragment = HistoryFragment()
2 -> {
fragment = servicesFragment
(fragment as ServicesFragment).updateServicesFragment()
}
3 -> fragment = ProfileAuthFragment()
}
return fragment
}
fun updateServicesFragment() {
servicesFragment.updateServicesFragment()
}
}
Layout:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".ui.pager.PagerFragment">
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<View
android:layout_width="fill_parent"
android:layout_height="1px"
android:background="@color/black"/>
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabLayout"
style="@style/TabText"
android:layout_width="match_parent"
android:layout_height="56dp"
android:layout_gravity="bottom"
android:elevation="20dp"
android:textAllCaps="false"
android:translationZ="20dp"
app:tabSelectedTextColor="@color/add_car_tab"
app:tabTextAppearance="@style/TabWidget"
tools:ignore="SpeakableTextPresentCheck" /></LinearLayout>