0

我想根据他们的名字在一个活动中启动几个片段,其中“i”是一个数字,所以......称呼。我已经包含了基本的静态调用,以及我根据我从 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;
    }
}
4

1 回答 1

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();
于 2012-10-14T21:48:59.107 回答