'FragmentStatePagerAdapter(androidx.fragment.app.FragmentManager)' 已弃用

2022-09-01 13:53:47

最近 已弃用,并且没有合适的解决方案可用。androidx.fragment.app.FragmentManager

已尝试实现对 V4 的支持,但无法与 .它显示未找到库。AndroidX

寻呼机适配器:

public ViewPagerAdapter(FragmentManager manager) {
    super(manager);
    //...
}

提前致谢。


答案 1

最近,androidx.fragment.app.FragmentManager 被弃用。

它目前未被弃用。例如,它在文档中未标记为已弃用

'FragmentStatePagerAdapter(androidx.fragment.app.FragmentManager)' 已弃用

单参数构造函数已弃用。但是,如果您阅读该构造函数的文档,您会发现:FragmentStatePagerAdapter

此构造函数已弃用。使用 FragmentStatePagerAdapter(FragmentManager, int) 和 BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT

因此,请替换为 ,以保留原始单参数构造函数的功能。FragmentStatePagerAdapter(fm)FragmentStatePagerAdapter(fm, FragmentStatePagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT)


答案 2

您可以更改默认构造函数,如下所示:

public SectionsPagerAdapter(@NonNull FragmentManager fm, int behavior, Context mContext) {
    super(fm, behavior);
    this.mContext = mContext;
}

定义的完整适配器类:

/**
 * A [FragmentPagerAdapter] that returns a fragment corresponding to
 * one of the sections/tabs/pages.
 */
public class SectionsPagerAdapter extends FragmentStatePagerAdapter {

    @StringRes
    private static final int[] TAB_TITLES = new int[]{R.string.tab_text_1, R.string.tab_text_2};
    private final Context mContext;

    public SectionsPagerAdapter(@NonNull FragmentManager fm, int behavior, Context mContext) {
        super(fm, behavior);
        this.mContext = mContext;
    }

    @NotNull
    @Override
    public Fragment getItem(int position) {
        // getItem is called to instantiate the fragment for the given page.
        // Return a ProductSearchFragment (defined as a static inner class below).
        if(position == 0) {
            return new ProductSearchFragment();
        } else if(position == 1) {
            return new GenericSearchFragment();
        }
        return new ProductSearchFragment();
    }

    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
        return mContext.getResources().getString(TAB_TITLES[position]);
    }

    @Override
    public int getCount() {
        // Show 2 total pages.
        return 2;
    }
}

你可以像这样打电话:

SectionsPagerAdapter sectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager(), FragmentStatePagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT, this);

谢谢。


推荐