FragmentPagerAdapter已弃用

时间:2019-06-26 17:20:23

标签: android kotlin android-viewpager fragmentmanager fragmentpageradapter

自API 27 FragmentPagerAdapter起已弃用。最好的替代方法是什么?

就我而言,我知道需要使用类似super(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT)之类的东西,但是我不知道代码需要去哪里。

我在课堂上得到了这些进口商品:

import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentPagerAdapter

但是FragmentPagerAdapter中的class MyViewPagerAdapter(manager: FragmentManager) : FragmentPagerAdapter(manager){被划掉了。

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]
        }
    }

5 个答案:

答案 0 :(得分:3)

javadocs实际上在FragmentPagerAdapter上有以下弃用通知:


不推荐使用此类。

切换到ViewPager2并改用FragmentStateAdapter


答案 1 :(得分:2)

需要切换到 ViewPager2,他们在这里有迁移指南。

https://developer.android.com/training/animation/vp2-migration#java

答案 2 :(得分:1)

似乎不仅构造函数没有行为,而且类 FragmentPagerAdapter (通过将Framents保留在内存中可以消耗大量内存)和 FragmentStatePagerAdapter 两者都处于贬值阶段。 我不知道可以使用什么来扩展抽象类 PagerAdapter 来延长代码库的寿命。

答案 3 :(得分:0)

替换:

class MyViewPagerAdapter(manager: FragmentManager) : FragmentPagerAdapter(manager)

具有:

class MyViewPagerAdapter(manager: FragmentManager) : FragmentPagerAdapter(manager, FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT)

(假设MyViewPagerAdapter不需要此值是可配置的)

答案 4 :(得分:0)

您可以使用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()
    }


}