繁体   English   中英

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

[英]How to replace switch statement in ViewPager Adapter

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

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

如果您只想用更紧凑的代码替换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 (resp。)中的常数3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM