首页 > 解决方案 > 如何扩展 FragmentPagerAdapter 类?

问题描述

当我尝试扩展他们的类时,我的 Android Studio 页面代码中不推荐使用 FragmentPagerAdapter。这个问题很烦人。我搜索了很多,但没有找到任何结果。请看下面的页面

package com.example.buyown;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;

public class PageAdapter  extends FragmentPagerAdapter {

int tabCount;
public PageAdapter(@NonNull FragmentManager fm, int behavior) {
    super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT );
    tabCount= behavior;
}

@NonNull
@Override
public Fragment getItem(int position) {

    switch (position){
        case 0:return new buyOwnTab1();
        case 1:return new buyOwnTab2();
        default: return null;
    }


}

@Override
public int getCount() {
    return tabCount;
}
}

标签: fragmentpageradapter

解决方案


https://developer.android.com/reference/androidx/fragment/app/FragmentPagerAdapter上的文档说:

此类已弃用。

切换到 ViewPager2 并改用 FragmentStateAdapter。

虽然从技术上讲,基于 FragmentPagerAdapter 与 FragmentStateAdapter 的内部结构,FragmentPagerAdapter 很容易遵循,因为它依赖于findFragmentByTag+ attach+ detach+ add,而 FragmentStateAdapter 和 ViewPager2 依赖于 RecyclerView 和“定期执行的gcFragments()调用”,这非常棘手,所以除非你明确要求ViewPager2 支持的新行为,没有理由从 ViewPager 切换 - 因为标准 ViewPager 还依赖于 Fragments 支持的标准机制。

这就是为什么@SuppressWarnings("deprecation")有时也是一个有效的解决方案,尽管并非总是如此。

IIRC,主要的关键区别是更简单的垂直滑动支持和更好的 RTL 支持。


推荐阅读