From 38a3183b9d86ff48adcd6a30cef9f1f0989d381f Mon Sep 17 00:00:00 2001 From: Hugh Daschbach Date: Thu, 25 Aug 2022 04:21:04 -0700 Subject: [PATCH] Resolve warning: FragmentPagerAdapter deprecated. Replace FragmentPagerAdapter with FragmentStateAdapter in BrowseTabsAdapter.kt. Refactored getPageTitle as a function that returns tab name. Tab text update moved to BrowseFragment. This requires replacement of setupWithViewPager with TabMediator.attach in BrowseFragment. Also requires replacing widget declaration androidx.viewpager.widget.ViewPager with androidx.viewpager2.widget.ViewPager2 in fragment_browwse.xml. --- .../funkwhale/ffa/adapters/BrowseTabsAdapter.kt | 13 ++++++------- .../audio/funkwhale/ffa/fragments/BrowseFragment.kt | 7 +++++-- app/src/main/res/layout/fragment_browse.xml | 2 +- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/audio/funkwhale/ffa/adapters/BrowseTabsAdapter.kt b/app/src/main/java/audio/funkwhale/ffa/adapters/BrowseTabsAdapter.kt index 272f24f..b8cb5ba 100644 --- a/app/src/main/java/audio/funkwhale/ffa/adapters/BrowseTabsAdapter.kt +++ b/app/src/main/java/audio/funkwhale/ffa/adapters/BrowseTabsAdapter.kt @@ -1,8 +1,7 @@ package audio.funkwhale.ffa.adapters import androidx.fragment.app.Fragment -import androidx.fragment.app.FragmentManager -import androidx.fragment.app.FragmentPagerAdapter +import androidx.viewpager2.adapter.FragmentStateAdapter import audio.funkwhale.ffa.R import audio.funkwhale.ffa.fragments.AlbumsGridFragment import audio.funkwhale.ffa.fragments.ArtistsFragment @@ -10,13 +9,13 @@ import audio.funkwhale.ffa.fragments.FavoritesFragment import audio.funkwhale.ffa.fragments.PlaylistsFragment import audio.funkwhale.ffa.fragments.RadiosFragment -class BrowseTabsAdapter(val context: Fragment, manager: FragmentManager) : - FragmentPagerAdapter(manager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) { +class BrowseTabsAdapter(val context: Fragment) : + FragmentStateAdapter(context) { var tabs = mutableListOf() - override fun getCount() = 5 + override fun getItemCount() = 5 - override fun getItem(position: Int): Fragment { + override fun createFragment(position: Int): Fragment { tabs.getOrNull(position)?.let { return it } @@ -35,7 +34,7 @@ class BrowseTabsAdapter(val context: Fragment, manager: FragmentManager) : return fragment } - override fun getPageTitle(position: Int): String { + fun tabText(position: Int): String { return when (position) { 0 -> context.getString(R.string.artists) 1 -> context.getString(R.string.albums) diff --git a/app/src/main/java/audio/funkwhale/ffa/fragments/BrowseFragment.kt b/app/src/main/java/audio/funkwhale/ffa/fragments/BrowseFragment.kt index f0a78a1..996c622 100644 --- a/app/src/main/java/audio/funkwhale/ffa/fragments/BrowseFragment.kt +++ b/app/src/main/java/audio/funkwhale/ffa/fragments/BrowseFragment.kt @@ -7,6 +7,7 @@ import android.view.ViewGroup import androidx.fragment.app.Fragment import audio.funkwhale.ffa.adapters.BrowseTabsAdapter import audio.funkwhale.ffa.databinding.FragmentBrowseBinding +import com.google.android.material.tabs.TabLayoutMediator class BrowseFragment : Fragment() { @@ -17,7 +18,7 @@ class BrowseFragment : Fragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - adapter = BrowseTabsAdapter(this, childFragmentManager) + adapter = BrowseTabsAdapter(this) } override fun onCreateView( @@ -27,11 +28,13 @@ class BrowseFragment : Fragment() { ): View { _binding = FragmentBrowseBinding.inflate(inflater) return binding.root.apply { - binding.tabs.setupWithViewPager(binding.pager) binding.tabs.getTabAt(0)?.select() binding.pager.adapter = adapter binding.pager.offscreenPageLimit = 3 + TabLayoutMediator(binding.tabs, binding.pager) { tab, position -> + tab.text = adapter?.tabText(position) + }.attach() } } diff --git a/app/src/main/res/layout/fragment_browse.xml b/app/src/main/res/layout/fragment_browse.xml index b58b4d1..afc7ccb 100644 --- a/app/src/main/res/layout/fragment_browse.xml +++ b/app/src/main/res/layout/fragment_browse.xml @@ -17,7 +17,7 @@ app:tabSelectedTextColor="@color/controlColor" app:tabTextColor="@color/colorPrimary" /> -