Android Fragment中getItem方法:Switch与If else该选哪一个?
在ViewPagerAdapter的getItem中:if-else vs Switch 怎么选?
嘿,这个问题在Android开发里挺常见的,我结合你做导游APP的场景给你捋捋两者的适用情况~
优先用Switch的场景
当你的Tab是固定的,position的取值是连续的整数(比如0、1、2、3这种对应不同的导游模块),Switch会是更好的选择:
- 代码结构更整洁,一眼就能对应上每个position对应的Fragment,后期维护起来更方便
- 编译器对连续整数的Switch会有优化,执行效率略高(虽然现代编译器下这点差距不大,但可读性的提升才是重点)
举个例子:
@Override public Fragment getItem(int position) { switch(position) { case 0: return new ScenicSpotFragment(); // 景点模块 case 1: return new FoodGuideFragment(); // 美食模块 case 2: return new HotelBookingFragment(); // 酒店模块 case 3: return new TravelPlanFragment(); // 行程规划 default: return new ScenicSpotFragment(); // 默认返回首页 } }
适合用if-else的场景
如果你的Tab逻辑比较复杂,比如需要结合额外条件判断(比如根据用户权限显示不同的Fragment,或者position的取值不连续),if-else的灵活性就体现出来了:
- 可以在判断position的同时,加入其他变量的逻辑判断
- 处理非连续的position取值时,比Switch更直观
比如你的导游APP有付费专属模块:
@Override public Fragment getItem(int position) { if (position == 0) { return new HomeFragment(); } else if (position == 1 && userIsVip) { return new VipExclusiveFragment(); // VIP专属景点推荐 } else if (position == 1 && !userIsVip) { return new FreeRecommendFragment(); // 免费景点推荐 } else if (position == 2) { return new FoodFragment(); } else { return new HomeFragment(); } }
额外推荐:更优雅的实现方式
如果你的Tab数量较多,或者后期可能频繁新增Tab,其实可以用列表来管理Fragment,比Switch和if-else更易扩展:
// 提前把需要的Fragment类存进列表 private final List<Class<? extends Fragment>> fragmentList = Arrays.asList( ScenicSpotFragment.class, FoodGuideFragment.class, HotelBookingFragment.class, TravelPlanFragment.class ); @Override public Fragment getItem(int position) { try { // 根据position直接获取并实例化Fragment return fragmentList.get(position).newInstance(); } catch (IllegalAccessException | InstantiationException e) { e.printStackTrace(); return new ScenicSpotFragment(); } }
这种方式新增Tab只需要在列表里加一行代码就行,不用修改getItem里的判断逻辑,扩展性拉满~
内容的提问来源于stack exchange,提问作者hesham ahmed
相关产品推荐
相关产品推荐

