【问题标题】:getSupportFragmentManager VS getChildFragmentManager [duplicate]getSupportFragmentManager VS getChildFragmentManager [重复]
【发布时间】:2018-07-18 07:06:17
【问题描述】:

我想在活动中创建片段。 我在 1 个活动中有 4 个片段 我有这样的代码

private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFragment(new fragment_invoice(), "Invoice");
    adapter.addFragment(new fragment_sales_order(), "Sales Order");
    adapter.addFragment(new fragment_achievement(), "Achievement");
    adapter.addFragment(new fragment_approval(), "Approval");
    viewPager.setAdapter(adapter);
}

class ViewPagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList      = new ArrayList<>();
    private final List<String> mFragmentTitleList   = new ArrayList<>();

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

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }

    public void addFragment(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }

}

我已经成功展示片段 但是当我打开其他片段时 1.打开fragment_invoice 2.移动到fragment_achievement 3.我回到fragment_invoice,然后所有数据都会丢失,但fragment_sales_order不会。 4.如果我打开fragment_sales_order,就会发生这种情况 5. 移动到fragment_approval,然后fragment_sales_order中的所有数据都会丢失。

为什么奇偶分片会丢失分片中的数据?

我正在对此进行研究,也许能给我一些使用 getchildfragmentmanager 的想法。 getChildFragmentManager () cannot be resolved or cannot be referenced

getchildfragmentmanager 方法必须扩展至 FragmentManager 但我的 java 类必须扩展 AppCompatActivity。无法扩展到 FragmentManager,因为我从 http 获得的一些数据扩展为活动意图

当我移动到其他片段时,有人可以帮助我修复我的片段以显示数据吗? 对不起,如果我的问题和语法很奇怪 감사합니다여러번

【问题讨论】:

    标签: java android android-fragments android-intent android-activity


    【解决方案1】:

    getChildFragmentManager()的定义是:

    返回一个私有的 FragmentManager,用于在 Fragment 中放置和管理 Fragment。

    同时getFragmentManager()的定义是:

    返回 FragmentManager 以与与片段活动关联的片段进行交互。

    基本上,不同之处在于 Fragment 现在有自己的内部 FragmentManager 可以处理 Fragment。子 FragmentManager 是处理仅包含在它添加到的 Fragment 中的 Fragment 的管理器。另一个 FragmentManager 包含在整个 Activity 中。

    要在 MainActivity 上显示 Fragment1,我们必须使用 getSupportFragmentManager()

    getSupportFragmentManager().beginTransaction().replace(R.id.container_view_on_main, Fragment1.newInstance());
    

    要从 Fragment1 显示 Fragment2,我们有两种方式

    使用 getFragmentManager()

    getFragmentManager().beginTransaction().replace(R.id.container_view_on_main, Fragment1.newInstance());
    

    使用 getChildFragmentManager()

    首先,我们要在fragment1.xml中创建一个id为container_view_on_fragment1的布局,然后

    getChildFragmentManager().beginTransaction().replace(R.id.container_view_on_fragment1, Fragment2.newInstance()).commit();
    

    【讨论】:

    • 你能给我一些源代码示例吗?
    • 我可以使用 addfragment() 方法吗?也许可以在 addfragment() 上给出一些示例代码
    • 也许 addfragment() 方法将是某人为添加不在 Android 框架中的片段而制作的自定义方法
    • 哦,好吧,对不起,我已经发布了可以给我示例的方法
    • 如果你喜欢我的努力,你可以接受答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    相关资源
    最近更新 更多