0

我有一个接受两个字符串数组的类。这些数组包含每个文件的文件名和标题。我正在设置 ViewPager,但因为这些数组可能会根据应用程序中的部分而改变,所以我不能使用 switch 语句。ViewPager 显示从我的资产文件夹中的文件收集数据的片段。

情景一:

  • fileString[] 的长度为 4
  • fileTitleString[] 的长度为 4

    @Override
    public Fragment getItem(int position) {
        Fragment fragment = new myFragment(FILE_PATH, fileString[SELECTION]);
    
    switch (position) {
    case 0:
        fragment = new myFragment(FILE_PATH, fileString[0]);
        break;
    case 1:
        fragment = new myFragment(FILE_PATH, fileString[1]);
        break;
    case 2:
        fragment = new myFragment(FILE_PATH, fileString[2]);
                    break;
    case 3:
        fragment = new myFragment(FILE_PATH, fileString[3]);
                    break;
    }
    
    return fragment;
    }
    
    @Override
    public CharSequence getPageTitle(int position) {
    String title = "";
    
    switch (position) {
    case 0:
        title = "    " + fileTitleString[0] + "    ";
        break;
    case 1:
        title = "    " + fileTitleString[1] + "    ";
        break;
    case 2:
        title = "    " + fileTitleString[2] + "    ";
        break;
    case 3:
        title = "    " + fileTitleString[3] + "    ";
        break;
    }
    
    return title;
    

    }

场景 B: - fileString[] 的长度为 5 - fileTitleString[] 的长度为 5

我知道 switch 子句所做的只是设置一个新片段,但 ViewPager 需要知道之前和之后的内容,以便您可以在片段之间滑动。

4

2 回答 2

0

如果您只想switch用更紧凑的代码替换语句,这应该有效:

@Override
public Fragment getItem(int position) {
    return new myFragment(FILE_PATH,
         fileString[position >= 0 && position <= 3 ? position : SELECTION]
    );
}

@Override
public CharSequence getPageTitle(int position) {
    return position >= 0 && position <= 3
        ? String.format("    %1$s    ", fileTitleString[position])
        : "";
}

您可能希望使用fileString.lengthfileTitleString.length(分别)代替和(分别)3中的常量。getItemgetPageTitle

于 2013-07-28T18:05:21.920 回答
0

如我所见,您只能在 getItem 方法中执行此操作。这取代了开关

@Override
public Fragment getItem(int position) {
    Fragment fragment = new myFragment(FILE_PATH, fileString[0]);

    if(position>=0&&position<fileString.length){
        fragment= new myFragment(FILE_PATH, fileString[position]);
    }
    return fragment;
}

和在getPageTitle中一样

@Override
public CharSequence getPageTitle(int position) {
    String title = "";
    if(position>=0&&position<fileTitleString.length){
        title = "    " + fileTitleString[postition] + "    ";
    }

    return title;
}
于 2013-07-28T18:00:06.647 回答