【问题标题】:'FragmentStatePagerAdapter(androidx.fragment.app.FragmentManager)' is deprecated'FragmentStatePagerAdapter(androidx.fragment.app.FragmentManager)' 已弃用
【发布时间】:2019-10-06 01:41:10
【问题描述】:

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

已尝试实现支持 V4,但不适用于 AndroidX。它显示找不到库。

PagerAdapter:

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

提前致谢。

【问题讨论】:

  • FragmentStatePagerAdapterFragmentPagerAdapter 都已被弃用。从 AndroidX 开始,我们需要使用ViewPager2 + FragmentStateAdapter。关注这个:stackoverflow.com/a/66545099/8664401

标签: java android android-fragments


【解决方案1】:

最近 androidx.fragment.app.FragmentManager 已弃用

目前尚未弃用。例如,it is not marked as deprecated in the documentation

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

不推荐使用单参数 FragmentStatePagerAdapter 构造函数。但是,如果你read the documentation for that constructor,你会发现:

此构造函数已弃用。 将 FragmentStatePagerAdapter(FragmentManager, int) 与 BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT 一起使用

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

【讨论】:

  • 谢谢,可以试试 super(fm,FragmentStatePagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
  • 今天替换这个:super(fm,FragmentStatePagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);对此: super(fm,FragmentPagerAdapter.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);

谢谢。

【讨论】:

    【解决方案3】:

    替换

    public SectionsPagerAdapter(FragmentManager fm) {
    
        super(fm);
    }
    

    public SectionsPagerAdapter(@NonNull FragmentManager fm,
                                int behavior) {
        super(fm,behavior);
    }
    

    你也可以去

    右键单击->生成->覆盖方法并单击第一项,如图所示。

    完成此操作后,您可能需要在其他地方更改代码。

    【讨论】:

      【解决方案4】:

      Kotlin 中的以下解决方案:

      class TasksPagerAdapter(fm: FragmentManager) : FragmentStatePagerAdapter(fm,BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT )
      

      【讨论】:

        【解决方案5】:

        我遇到了同样的问题。

        变化:

        private class TestTest extends FragmentStatePagerAdapter
        

        收件人:

        private class TestTest extends FragmentPagerAdapter {
        

        它会改变:

        import androidx.legacy.app.FragmentStatePagerAdapter;
        

        收件人:

        import androidx.fragment.app.FragmentPagerAdapter;
        

        【讨论】:

          猜你喜欢
          • 2021-12-25
          • 2014-02-12
          • 1970-01-01
          • 2016-03-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多