Java开发中如何避免使用else if实现安卓屏幕方向循环切换逻辑
优化方案1:通过有序常量列表消除分支判断
将你需要循环切换的屏幕方向常量按既定流转顺序存入静态有序列表,切换时只需计算下一个位置的常量即可,无需多分支判断:
// 提前定义方向切换的流转顺序 private static final List<Integer> ORIENTATION_FLOW = Arrays.asList( ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE, ActivityInfo.SCREEN_ORIENTATION_PORTRAIT, ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE ); // 原有全局变量 int currentOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; // 切换方向处的逻辑 case R.id.change_orientation: int currentPos = ORIENTATION_FLOW.indexOf(currentOrientation); // 超出列表长度自动回到第一个位置,实现循环切换 int nextPos = (currentPos + 1) % ORIENTATION_FLOW.size(); int targetOrientation = ORIENTATION_FLOW.get(nextPos); setRequestedOrientation(targetOrientation); currentOrientation = targetOrientation;
该方案的优势:
- 完全消除冗余的if-else分支,代码逻辑更简洁清晰
- 后续需要调整切换顺序、新增/移除切换状态时,只需修改
ORIENTATION_FLOW列表的内容即可,不需要修改切换逻辑,可维护性更高
可选优化:无需自行维护当前方向变量
如果你不需要全局持有方向状态,也可以直接通过系统API获取当前实际的屏幕方向,和上述逻辑配合使用即可,注意做好系统返回的方向常量和ActivityInfo中方向常量的映射对应。
内容的提问来源于stack exchange,提问作者Stefan DOK
相关产品推荐
相关产品推荐

