对于我的Android项目,我准备了一个专用类,用于监听onClick()
,onTouch()
和onItemSelected()
事件(它是MVC的Controller),并且屏幕上有几个Spinner
对象。在这种情况下,触发事件时,算法必须知道1)选择了哪个Spinner
和2)选择了哪个Item
。因此,其导致具有如下所示的嵌套开关。
@Override
public void onItemSelected(AdapterView<?> parent, View v, int position, long id) {
switch(parent.getId()) {
case R.id.spn1:
switch (position) {
case 0:
// code
break;
case 1:
// code
break;
case 2:
// code
break;
}
break;
case R.id.spn2:
switch (position) {
case 0:
// code
break;
case 1:
// code
break;
case 2:
// code
break;
}
break;
case R.id.spn3:
switch (position) {
case 0:
// code
break;
case 1:
// code
break;
case 2:
// code
break;
}
break;
default:
}
}
下面发布的示例已经让我头疼。我一定会想知道是否有某些方法(也许使用OOP)来避免这种麻烦。
最佳答案
这取决于您要如何处理这些微调器位置。如果您在每个微调器位置都做完全不同的事情,那么您将无法进一步优化。
在这种情况下,您能做的最好的事情就是为每个项目(或每个微调器,如果一个微调器在所有位置上做类似的事情)创建并调用一个私有函数。
不要以为嵌套开关不好,它们执行起来很快,易于阅读和维护。您应该避免在每个case
块中放入太多代码。您应该改为调用私有函数。