Java 动态更新片段调用

Java 动态更新片段调用,java,android,string,variables,Java,Android,String,Variables,我想在一个基于名称的活动中启动几个片段,其中“I”是一个数字,所以。。。DummySection1Fragment、DummySection2Fragment、DummySection3Fragment等。我在尝试获取价值以创建调用时遇到的问题。我已经包括了基本的静态调用和我根据JavaScript世界的知识创建的调用(我打赌这是我的问题) 我非常感谢任何人(尽管我看起来还是我自己)对最好的方法的帮助,因为我怀疑这是一种我会反复使用的潜在方法 当前静态代码 public Fragment

我想在一个基于名称的活动中启动几个片段,其中“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;
    }
}

我强烈反对这种应用行为。如果您想稍后删除#3,并拥有项目#4到#17,该怎么办?或者你需要在#6和#7之间加一个。这需要进行大量重命名(假设您正在维护秩序)

我建议给它们取一个专有的名字,然后用手将它们实例化。如果执行此操作,则可以将它们存储在
ArrayList
中,然后返回
.get(i)

如果您完全100%决定采用您的方法,您应该可以这样做:

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

谢谢你的想法,埃里克。。。。目前正在使用一些ADT示例。。。。我已经在上面粘贴了完整的适配器。TBH我很想从空白处构建,这样我就知道将要做什么,而不是编辑……按照它已经设置好的方式,它向
片段发送一个参数,告诉它它是什么数字。因此,每一个都是相同的
DummySectionFragment
,但根据
ARG\u SECTION\u NUMBER
参数的不同行为。是的。。。然而,该示例仅获取该参数并将文本打印到屏幕上,并更改标题。退一步,如果我有6个不同的屏幕,我计划-2个是RSS,1个文本和一个HTML构建逻辑(if/else等),而不是调用单个片段?是的,你应该为此创建自己的片段。但是,如我所说,分别创建它们并将它们放入片段的
ArrayList
。这样,您甚至可以重用它们。我认为对于像你这样的应用程序来说,这绝对是最有意义的。