【问题标题】:FragmentTransaction with FragmentPagerAdapter使用 FragmentPagerAdapter 的 FragmentTransaction
【发布时间】:2013-11-26 09:34:55
【问题描述】:

我使用 FragmentPagerAdapter 来管理 3 个 Fragment。

public class SectionsPagerAdapter extends FragmentPagerAdapter {

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

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
    }

    @Override
    public Fragment getItem(int position) {
        // getItem is called to instantiate the fragment for the given page.
        Fragment fragment = new Fragment();
        switch (position) {
            case 0:
                return fragment = new Latest();
            case 1:
                return fragment = new MySets();
            case 2:
                return fragment = new MyPictures();
            default:
                break;
        }
        return fragment;
    }

    @Override
    public int getCount() {
        // Show 3 total pages.
        return 3;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        //SET TITLE OF TABS
        Locale l = Locale.getDefault();
        switch (position) {
            case 0:
                return getString(R.string.title_section1_latest).toUpperCase(l);
            case 1:
                return getString(R.string.title_section2_mysets).toUpperCase(l);
            case 2:
                return getString(R.string.title_section3_allpictures).toUpperCase(l);
        }
        return null;
    }
}

所有片段都扩展片段。使用扩展 BaseAdapter 的适配器处理点击事件和自定义布局。 我的目标是通过另一个 Fragment 替换 Fragment 2。我必须使用 FragmentTransaction 添加所有 Fragments 以稍后替换它们是否正确?

但是如何动态添加片段以使用 FragmentTransaction?有没有办法将它们添加到 getItem(int position) 或者这是错误的方法?

【问题讨论】:

    标签: android android-fragments


    【解决方案1】:

    编辑

    如果您在应用程序启动后立即需要 Fragment,那么您在上面在 getItem() 中使用的方法是可以的,您不需要从那里进行交易。

    如果您想稍后替换 Fragment,只需使用 getSupportFragmentManger 和 Fragment 中的事务。

                NewFragment newFrag = new NewFragment();
        FragmentTransaction transaction = getActivity()
                .getSupportFragmentManager().beginTransaction();
        transaction.replace(R.id.your_fragment_container_id, newFrag);
        transaction.addToBackStack(null);
        transaction.commit();
    

    【讨论】:

    • 但是我可以在哪里以及如何在“需要时”添加片段?在 SectionPagerAdapter 还是在 Fragment 类中?
    • 如果您在应用程序启动后立即需要该片段,则可以将其添加到 SectionPagerAdapter 中。如果您已经有一个片段并且想要替换那个片段,则将其添加到片段类中。
    • 应用启动后我需要 Fragments。但我不知道如何通过 FragmentTransaction 在 SectionPagerAdapter 添加片段...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-08
    • 2012-06-14
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多