【问题标题】:How to replace switch statement in ViewPager Adapter如何替换 ViewPager Adapter 中的 switch 语句
【发布时间】:2013-07-28 17:51:55
【问题描述】:

我有一个接收两个字符串数组的类。这些数组包含每个文件的文件名和标题。我正在设置一个 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 需要知道之前和之后的内容,以便您可以在片段之间滑动。

【问题讨论】:

  • 您是否只想将switch 语句替换为执行相同操作的更简单的代码?还是您的问题还有更多(涉及您在上一段中提到的“之前和之后”问题)?
  • 提示:位置和数组索引。 :)
  • 我只是想替换 switch 语句,这样代码就可以确定文件路径中的文件数量并生成那么多片段。尝试了您的代码 Ted,但遇到了问题,并且像以前一样让数组越界异常。对于未来的人们,请参阅 Sipka 的回答 效果很好,很容易理解!谢谢大家!和 Qberticus 我非常感谢您的提示 =]

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


【解决方案1】:

正如我所见,您只能在 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;
}

【讨论】:

  • 完美运行!谢谢Sipka,很容易理解。很接近,我知道我做错了什么。
【解决方案2】:

如果您只想用更紧凑的代码替换 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(分别)代替getItemgetPageTitle(分别)中的常量3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多