我想在一个基于他们名字的活动中启动几个片段,其中'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;
}
}
答案 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();