首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FragmentPagerAdapter被否决

FragmentPagerAdapter被否决
EN

Stack Overflow用户
提问于 2019-06-26 17:20:23
回答 7查看 73.5K关注 0票数 98

因为API 27不推荐FragmentPagerAdapter。最好的替代方案是什么?

在我的例子中,我理解需要使用类似于super(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT)的东西,但是我不知道在我的代码中需要用到什么。

我在班上得到了这些进口品:

代码语言:javascript
复制
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentPagerAdapter

FragmentPagerAdapter in class MyViewPagerAdapter(manager: FragmentManager) : FragmentPagerAdapter(manager){被划掉了。

代码语言:javascript
复制
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]
        }
    }
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2019-06-26 17:23:33

更新2021-06-14:在这一点上,ViewPager本身几乎是不可取的.从技术上讲,ViewPager是不受欢迎的,但是两个具体的PagerAdapter实现-- FragmentPagerAdapterFragmentStatePagerAdapter --被否决了。理想情况下,切换到其他东西,如ViewPager2适于伴奏的传呼机

取代:

代码语言:javascript
复制
class MyViewPagerAdapter(manager: FragmentManager) : FragmentPagerAdapter(manager)

通过以下方式:

代码语言:javascript
复制
class MyViewPagerAdapter(manager: FragmentManager) : FragmentPagerAdapter(manager, FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT)

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

票数 147
EN

Stack Overflow用户

发布于 2020-03-20 23:15:57

javadocs实际上在FragmentPagerAdapter上有下面的弃用通知

这个类是不推荐的.

切换到ViewPager2,转而使用FragmentStateAdapter

票数 13
EN

Stack Overflow用户

发布于 2021-10-06 13:44:01

用ViewPager2切换到FragmentStateAdapter。

以下是XML视图:-

代码语言:javascript
复制
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <com.google.android.material.tabs.TabLayout
        android:id="@+id/tab_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <androidx.viewpager2.widget.ViewPager2
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />

</LinearLayout>
代码语言:javascript
复制
class AdapterTabPager(activity: FragmentActivity?) : FragmentStateAdapter(activity!!) {
    private val mFragmentList: MutableList<Fragment> = ArrayList()
    private val mFragmentTitleList: MutableList<String> = ArrayList()
    
    public fun getTabTitle(position : Int): String{
        return mFragmentTitleList[position]
    }

    fun addFragment(fragment: Fragment, title: String) {
        mFragmentList.add(fragment)
        mFragmentTitleList.add(title)
    }

    override fun getItemCount(): Int {
        return mFragmentList.size
    }

    override fun createFragment(position: Int): Fragment {
        return mFragmentList[position]
    }
}

下面是实例化ViewPager的方法:-

代码语言:javascript
复制
val adapter = AdapterTabPager(activity)
        adapter.addFragment(categoryFragment, "Category")
        adapter.addFragment(brandFragment, "Brand")

        rootView.viewpager.adapter = adapter
        rootView.viewpager.currentItem = 0
        TabLayoutMediator(rootView.tabs, rootView.viewpager) { tab, position ->
            tab.text = adapter.getTabTitle(position)
        }.attach()
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56778106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档