我有一个接受两个字符串数组的类。这些数组包含每个文件的文件名和标题。我正在设置一个ViewPager,但因为这些数组可能会根据应用程序中的部分而改变,所以我无法使用switch语句。 ViewPager显示从我的资产文件夹中的文件收集数据的片段。
情景A:
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需要知道之前和之后的内容,以便你可以在片段之间滑动。
答案 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.length
和fileTitleString.length
代替3
和getItem
中的常量getPageTitle
。(分别)。< / p>