对于我的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块中放入太多代码。您应该改为调用私有函数。

07-24 14:59