Seit API 27 FragmentPagerAdapter ist veraltet. Was ist die beste Alternative dafür?
In meinem Fall verstehe ich so etwas wie super(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) müsste verwendet werden, aber ich weiß nicht, wo in meinem Code das hingehört.
aber FragmentPagerAdapter in class MyViewPagerAdapter(manager: FragmentManager) : FragmentPagerAdapter(manager){ ist durchgestrichen.
class MyViewPagerAdapter(manager: FragmentManager) : FragmentPagerAdapter(manager){
private val fragmentList : MutableList<androidx.fragment.app.Fragment> = ArrayList()
private val titleList : MutableList<String> = ArrayList()
override fun getItem(position: Int): androidx.fragment.app.Fragment {
return fragmentList[position]
}
override fun getCount(): Int {
return fragmentList.size
}
fun addFragment(fragment: androidx.fragment.app.Fragment, title: String){
fragmentList.add(fragment)
titleList.add(title)
}
override fun getPageTitle(position: Int): CharSequence? {
return titleList[position]
}
}
CommonsWare
UPDATE 2021-06-14: An dieser Stelle, ViewPager selbst ist alles andere als veraltet. Technisch, ViewPager ist nicht veraltet, aber die beiden konkret PagerAdapter Implementierungen — FragmentPagerAdapter und FragmentStatePagerAdapter – sind veraltet. Wechseln Sie idealerweise zu etwas anderem, z ViewPager2 oder der in Accompanist zusammensetzbare Pager.
Ersetzen:
class MyViewPagerAdapter(manager: FragmentManager) : FragmentPagerAdapter(manager)
mit:
class MyViewPagerAdapter(manager: FragmentManager) : FragmentPagerAdapter(manager, FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT)
(vorausgesetzt, dass MyViewPagerAdapter muss dieser Wert nicht konfigurierbar sein)
Warum brauche ich das, nachdem ich dieses @SuppressLint (“WrongConstant”) hinzugefügt habe, nachdem ich dies im Konstruktor FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT hinzugefügt habe?
– Asad Mukhtar
3. Dezember 2019 um 19:28 Uhr
@AsadMukhtar: Ich weiß es nicht, tut mir leid. Sie könnten eine separate Stack Overflow-Frage stellen, in der Sie ein reproduzierbares Minimalbeispiel angeben können, das zeigt, was Sie versuchen und wo Sie diese Anmerkung anwenden mussten.
– CommonsWare
3. Dezember 2019 um 23:04 Uhr
Ich habe das gleiche Problem mit dem Konstruktor, er soll einen LifeCycle-Parameter erhalten, denke ich.
– Everett
25. Mai 2020 um 23:34 Uhr
Alternativ können Sie auch sagen @SuppressWarnings("deprecation") in Fällen wo ViewPager2 bricht Ihr App-Verhalten 😀
– EpicPandaForce
14. Juni 2021 um 12:26 Uhr
@EpicPandaForce: Einverstanden, obwohl Google irgendwann die Aktualisierung einstellen wird androidx.viewpager:viewpager. Selbst dann können Sie möglicherweise die zuletzt ausgelieferte Version für eine Weile verwenden, bevor eine transitive Abhängigkeit oder etwas den Build unterbricht, wenn Sie andere Dinge aktualisieren. Wir müssen also nicht rennen und ersetzen ViewPager diese Woche, aber ich würde es irgendwann in den nächsten ein oder zwei Jahren empfehlen.
– CommonsWare
14. Juni 2021 um 12:31 Uhr
Die Javadocs haben tatsächlich den folgenden Hinweis auf veraltete Inhalte FragmentPagerAdapter:
Es scheint, als wäre nicht nur der Konstruktor ohne Verhalten, sondern die Klasse FragmentPagerAdapter (was viel Speicher verbrauchen kann, indem es Fragmente im Speicher behält) und FragmentStatePagerAdapter befinden sich beide in der Abschreibungsphase. Ich frage mich, was verwendet werden kann, um die abstrakte Klasse zu erweitern PagerAdapter um die Lebensdauer der Codebasis zu verlängern.
Tippu Fisal-Sheriff
Sie können verwenden FragmentStateAdapter(fragment)
class YourViewPagerAdapter(fragment: Fragment, val mFragmentList: Array<String>, val viewPager: ViewPager2) : FragmentStateAdapter(fragment){
override fun getItemCount(): Int {
return mFragmentList.size
}
override fun createFragment(position: Int): Fragment {
when(position){
0 -> return YourFirstTabFragment()
1 -> return YourSecondTabFragment()
2 -> return YourThirdTabFragment()
}
return YourFirstTabFragment()
}
}