当前位置: 首页 > 知识库问答 >
问题:

FragmentPagerAdapter已弃用

穆铭晨
2023-03-14

由于API 27FragmentPagerAdapter已弃用。对此最好的替代方案是什么?

在我的例子中,我知道需要使用超级(碎片管理器,BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT)之类的东西,但我不知道在我的代码中这需要去哪里。

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

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

但是 MyView页面适配器适配器 (管理器: FragmentManager) : FragmentPager适配器(管理器){ 被划掉了。

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

共有3个答案

闽经纬
2023-03-14

使用FragmentStateAdapter切换到ViewPager2。

下面是XML视图:-

<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>
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的方法:-

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()

朱自明
2023-03-14

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

此类已被否决。

切换到ViewPager2并改用FragmentStateAdapter。

易星宇
2023-03-14

更新2021-06-14:此时,ViewPager本身几乎被弃用。从技术上讲,ViewPager并未弃用,但两个具体的PagerAdapter实现-FragmentPagerAdapterFragmentStatePagerAdapter-已弃用。理想情况下,切换到其他东西,例如ViewPager2或可组合的寻呼机。

替换:

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

与:

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

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

 类似资料:
  • 我有一个警告:FragmentPagerAdapter已弃用。这是我的代码: 我在这里找到了一个可能的解决方案:片段页面适配器已弃用 但它在Kotlin中。 警告的字眼是:超级

  • 问题内容: 今天,我决定将我的android应用程序从Java转换为Kotlin!:)但是,当我输入以下内容时,我感到非常惊讶: 然后Android Studio告诉我:“’getActionView(MenuItem!):View!’ 已弃用。Java中已弃用“ 因此,在问您解决方案之前,我先问谷歌解决方案是什么,我相信我找到了解决方案:“直接使用getActionView()”。 所以我像这样

  • 目前我正在开发一个带有三个菜单项的底部导航栏的应用程序。我曾使用来单击项目。但现在我面临的问题是该方法已贬值。 应用程序语言:Java 问题:“setOnNavigationItemSelectedListener(com.google.android.material.bottomnavigation.BottomNavigationView.OnNavigationItemSelectedLi

  • 我一直在开发一个使用Google Drive API的Android应用程序。它最初是从这里的quickstart示例构建的。API调用的简化序列(此处未显示正确的错误处理)是: 它一直运行良好,我正准备发布我的应用程序。但是,在驱动器API更新之后,我突然收到一个警告 方法usingOAuth2(Context,String,String...)GoogleAccountCredential是不

  • Variable (已弃用) Variable 是早期添加到 RxSwift 的概念,通过 “setting” 和 “getting”, 他可以帮助我们从原先命令式的思维方式,过渡到响应式的思维方式。 但这只是我们一厢情愿的想法。许多开发者滥用 Variable,来构建 重度命令式 系统,而不是 Rx 的 声明式 系统。这对于新手很常见,并且他们无法意识到,这是代码的坏味道。所以在 RxSwift

  • 问题内容: 我正在3.6.0版中使用Hibernate,并且AnnotationConfiguration标记为已弃用。 这是我的HibernateUtil.java类中的行: 什么是AnnotationConfiguration的替代品? 问题答案: “所有功能已移至配置”:http : //docs.jboss.org/hibernate/core/3.6/javadocs/org/hiber