如何在FragmentPagerAdapter的某些覆盖方法中设置片段ID?

时间:2015-09-22 15:29:22

标签: android android-fragments fragmentpageradapter

我有一个FragmentPagerAdapter,在片段类中我有一个公共方法,我需要在main活动中使用它。 在这一点上,我不知道如何访问包含该方法的片段。我可以在下面的类中修改一些内容来设置id或者什么来分段吗?

public class SectionsPagerAdapter extends FragmentPagerAdapter {
    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
            switch (position) {
            case 0:
                return new Fragment_1();
            case 1:
                return new Fragment_2();
            case 2:
                return new Fragment_3();
            }
        return null;
    }

    @Override
    public int getCount() {
        return 3;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        Locale l = Locale.getDefault();
            switch (position) {
            case 0:
                return getString(R.string.fg_1).toUpperCase(l);
            case 1:
                return getString(R.string.fg_2).toUpperCase(l);
            case 2:
                return getString(R.string.fg_3).toUpperCase(l);
            }
        }
        return null;
    }
}

如何设置Fragment id或Fragment标签或其他东西以便稍后访问该片段?

访问片段方法的任何其他方式都可能很好。

以更多信息编辑:

我真的迷失了。但是,我也有一个ViewPager,这些片段与actionBar Tabs相关联。

mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mSectionsPagerAdapter);

mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener(){
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    @Override
    public void onPageSelected(int position) {
        actionBar.setSelectedNavigationItem(position);
    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }
});

for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
    actionBar.addTab(actionBar.newTab().setText(mSectionsPagerAdapter.getPageTitle(i)).setTabListener(this));
}

有没有办法与碎片沟通?

1 个答案:

答案 0 :(得分:-2)

像这样:

        switch (position) {
        case 0:
            Fragment f = new Fragment_1();
            f.setId(...);
            return f;
        case 1:
            ...
        }

这假设你的片段中有一个setId方法。

然而,我所做的是为每个片段定义一个静态字符串TAG,然后我可以使用Fragment_1.TAG访问它。