不推荐使用“ FragmentStatePagerAdapter(androidx.fragment.app.FragmentManager)”

时间:2019-05-19 13:14:55

标签: java android android-fragments

最近不推荐使用androidx.fragment.app.FragmentManager,并且没有适当的解决方案。

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

PagerAdapter:

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

谢谢。

5 个答案:

答案 0 :(得分:9)

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

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

谢谢。

答案 1 :(得分:3)

替换

public SectionsPagerAdapter(FragmentManager fm) {

    super(fm);
}

使用

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

或者您可以

右键单击->生成->替代方法,然后单击第一项,如图所示。enter image description here

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

答案 2 :(得分:2)

  

最近不推荐使用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),以保留原始一参数构造函数的功能。

答案 3 :(得分:1)

在Kotlin中的解决方案如下:

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

答案 4 :(得分:0)

我遇到了同样的问题。

更改:

private class TestTest extends FragmentStatePagerAdapter

收件人:

private class TestTest extends FragmentPagerAdapter {

它将改变:

import androidx.legacy.app.FragmentStatePagerAdapter;

收件人:

import androidx.fragment.app.FragmentPagerAdapter;