动态更新片段调用

时间:2012-10-14 21:42:06

标签: java android string variables

我想在一个基于他们名字的活动中启动几个片段,其中'i'是一个数字,所以...... DummySection1Fragment,DummySection2Fragment,DummySection3Fragment等等。我怎么会遇到问题,我尝试通过创建呼叫。我已经包含了基本的静态调用,以及我根据JavaScript世界所知的创建自己的那个(​​我打赌这是我的问题)。

我很感激任何帮助(虽然我仍然看着我的自己)以最好的方式做到这一点,因为我怀疑它是一种我会一次又一次使用的潜在方法。

当前静态代码

    public Fragment getItem(int i) {
    Fragment fragment = new DummySectionFragment();

错误:无效的字符常量

    public Fragment getItem(int i) {
    Fragment fragment = new 'DummySection' + i + 'Fragment'();

完整代码

/**
 * A {@link FragmentPagerAdapter} that returns a fragment corresponding to one of the primary
 * sections of the app.
 */
public class SectionsPagerAdapter extends FragmentPagerAdapter {

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

    @Override
    public Fragment getItem(int i) {
        Fragment fragment = new DummySectionFragment();
        Bundle args = new Bundle();
        args.putInt(DummySectionFragment.ARG_SECTION_NUMBER, i + 1);
        fragment.setArguments(args);
        return fragment;
    }

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

    @Override
    public CharSequence getPageTitle(int position) {
        switch (position) {
            case 0: return getString(R.string.title_section1).toUpperCase();
            case 1: return getString(R.string.title_section2).toUpperCase();
            case 2: return getString(R.string.title_section3).toUpperCase();
            case 3: return getString(R.string.title_section4).toUpperCase();
            case 4: return getString(R.string.title_section5).toUpperCase();
            case 5: return getString(R.string.title_section6).toUpperCase();
        }
        return null;
    }
}

1 个答案:

答案 0 :(得分:1)

我建议高度反对此应用行为。如果您想稍后删除#3并拥有#4到#17项,该怎么办?或许您需要在#6和#7之间添加一个。这是很多重命名(假设你维持秩序)。

我建议给他们正确的名字,并手工实例化。如果您这样做,可以将它们存储在ArrayList<Fragment>中,然后返回.get(i)

如果你完全100%决心改用你的方法,你应该能够这样做:

Class clazz = Class.forName("DummySection" + i + "Fragment"); // Use ", not '
Fragment frag = (Fragment) clazz.newInstance();