【问题标题】:Struggling with a top level FragmentPagerAdapter containing a Fragment with its own FragmentPagerAdapter在顶级 FragmentPagerAdapter 中挣扎,其中包含一个带有自己的 FragmentPagerAdapter 的 Fragment
【发布时间】:2015-04-10 00:39:21
【问题描述】:

有一个 2 级 UI,顶层有一个由 FragmentPagerAdapter 驱动的选项卡条。其中一个片段又具有第二级 FragmentPagerAdapter 和它自己的带有几个“子”片段的标签条。现在,子片段在第一次遍历顶级选项卡时显示。但是“子”片段在第二次迭代时不显示

这是在顶层存在的片段之一中创建 subtabpager 适配器的方式

公共最终类 MainLevelTabFragment 扩展片段 {

private SubpageTabsPagerAdapter mSubpagePagerAdapter;
private ViewPager mSubpageViewPager;
private SlidingTabLayout mSlidingTabLayout;


@Override
public View onCreateView(LayoutInflater inflater,
                         ViewGroup container, Bundle savedInstanceState) {

    View rootView = null;
    Bundle bundle = getArguments();

        rootView = inflater.inflate(R.layout.fragment_tab_main_level, container, false);
        mSubpageViewPager = (ViewPager) rootView.findViewById(R.id.subpage_screen_tabs_pager);
        mSlidingTabLayout = (SlidingTabLayout) rootView.findViewById(R.id.sliding_tabs);

        mSubpagePagerAdapter = new SubpageTabsPagerAdapter(getSupportFragmentManager, getActivity());
        mSubpageViewPager.setAdapter(mSubpagePagerAdapter);

    return rootView;
}

SubpageTabsPagerAdapter 代码如下所示

public class SubpageTabsPagerAdapter extends FragmentPagerAdapter {

    private Context mContext;
    private Cursor mCursor;

    public SubpageTabsPagerAdapter(FragmentManager fm, Context context) {
        super(fm);
        mContext = context;
    }

    @Override
    public Fragment getItem(int position) {
        if (null == mCursor)
            return null;

        mCursor.moveToPosition(position);

        Fragment fragment = new SubtabFragment();
        fragment.setArguments(args);

        return fragment;
    }

    @Override
    public int getCount() {
        return (null != mCursor) ? mCursor.getCount() : 0;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        if (null == mCursor)
            return null;

        mCursor.moveToPosition(position);

        return "title";
    }

    public void swapCursor(Cursor c) {
        if (mCursor == c)
            return;

        mCursor = c;
        notifyDataSetChanged();
    }
}

【问题讨论】:

    标签: android android-fragments fragmentpageradapter


    【解决方案1】:

    我认为您可能必须在 SubpageTabsPagerAdapter 构造函数中使用 getChildFragmentManager() 而不是 getSupportFragmentManager()

    【讨论】:

    • 是的,就是这样。 getChildFragmentManager() 解决了不一致的行为。谢谢你!
    • 很高兴为您提供帮助。请通过将我的答案标记为正确来回报。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多