当前位置: 首页 > 知识库问答 >
问题:

如何正确地将片段与嵌套片段一起使用?

薛修能
2023-03-14

我有4个片段,其中一个片段中有一个viewpager和一个不同的类,我用3个其他片段定义了viewpager的适配器,第一次打开此片段时,所有子片段都正确显示在viewpager中,但当我切换(使用transaction.replace)到另一个片段并再次返回时,子片段消失了,我不能使用ChildFragmentManager,因为它在代码中显示错误(ChildFragmentManager无法解析为类型(我有最新的支持库更新)),如何在每次显示此片段时加载这些子片段?

以下是我的一些代码:

public class MainFragment extends Fragment {

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

        view = inflater.inflate(R.layout.fragment_mainfragment1, null);
        mPager = (ViewPager) view
            .findViewById(R.id.fMainPager);
        mPagerAdapter = new SubFragmentMainPagerAdapter(getFragmentManager());
        mPager.setAdapter(mPagerAdapter);
        mPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                mActionBar.setSelectedNavigationItem(position);
            }
        });
        // mPager.setCurrentItem(1);
        return view;
    }

PagerAdapter:

public class SubFragmentMainPagerAdapter extends FragmentPagerAdapter {

private Context mContext;
FragmentManager fragMan; 


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

@Override
public Fragment getItem(int e) {
    switch (e) {
    case 0:
        return new SubFragment_1();

    case 1:
        return new SubFragment_2();

    case 2:
        return new SubFragment_3();
    }
    return null;

}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return 3;
}

}

共有1个答案

赵智勇
2023-03-14
  1. 使用android.support.v4.app.片段而不是android.app.片段
  2. 切换到导入android.support.v4.app.FragmentManager使用getBackportFragmentManager()而不是getFragmentManager
  3. 现在使用getChildFragmentManager()嵌套片段
  4. 如果您仍然没有,请切换到AppCompatActive
 类似资料:
  • 你好,堆栈溢出的好程序员!我已经花了一个星期的时间来解决这个问题,现在非常渴望一个解决方案。 我正在使用android。应用程序。不要将片段与支持片段混淆。 我有6个子片段名为: <代码>片段一 碎片二 碎片三 碎片a 碎片b 显示子片段<代码>片段A、<代码>片段B和<代码>片段C。 我正在尝试转换/设置父片段和子片段的动画。子片段平稳过渡,如预期。然而,当我转换到一个新的父片段时,它看起来很糟

  • 问题内容: 我正在尝试创建一个viewpager,它可以通过3个不同的片段滑动,每个片段具有不同的工具栏。我之前已经在一个活动中实现了新工具栏,并且可以使用它,但是我正在尝试使其与片段一起使用 这是片段代码 我使用扩展了片段,但是却出现了错误 我不确定如何解决此问题,如果删除代码,它将停止在某些设备上运行吗? 问题答案: 片段没有这种方法。ActionBar是Activity的属性,因此要将工具栏

  • 我正在尝试创建一个viewpager,它可以用不同的工具栏浏览3个不同的片段。我之前在一个活动中实现了新工具栏,并使其正常工作,但我正在尝试使其与片段一起工作 这是碎片代码 我正在用片段扩展我的片段,但是我得到了错误 我不知道如何解决这个问题,如果我删除代码,它会停止与某些设备一起工作吗?

  • 我有这个活动,它包含一个片段。这个片段布局由一个包含多个片段(实际上是两个)的视图寻呼机组成。 当创建视图分页器时,它的适配器被创建,被调用,我的子片段被创建。太棒了。 现在,当我旋转屏幕时,框架处理片段的重新创建,适配器从主片段在我的中再次创建,但是从未被调用,因此我的适配器持有错误的引用(实际上为空),而不是两个片段。 我发现片段管理器(即子片段管理器)包含一个名为的片段数组,这当然是代码无法

  • 情况: > 在按钮上的第一个片段,我想打开带有部分的第二个片段 在第二个片段上,我可以创建新部分(或使用已存在的),然后在列表项上单击打开第三个片段 在第三个片段上,我可以编写新服务(或使用已存在的服务),然后单击按钮返回第一个片段 并显示部分(来自第二个片段)和服务(来自第三个片段) 我的想法是使用片段。在第二个片段上设置参数(bundle),并将其传输到第三个片段 我应该如何正确地将变量从Al

  • Back Stack是否支持与Android中的嵌套片段交互? 如果是这样,我做错了什么?在我的实现中,后退按钮完全忽略了我将此事务添加到后堆栈的事实。我希望这不是因为嵌套片段的问题,只是我做了一些不正确的事情。 以下代码位于我的一个片段中,用于将新片段与当前显示的任何嵌套片段交换: