如何在ViewPager适配器中替换switch语句

时间:2013-07-28 17:51:55

标签: android android-fragments android-viewpager switch-statement

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

情景A:

  • 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需要知道之前和之后的内容,以便你可以在片段之间滑动。

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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代替3getItem中的常量getPageTitle。(分别)。< / p>