2013-10-26 3 views
1

Основываясь на minIndex, я устанавливаю различную видимость вида. Я думаю, что его можно реорганизовать как простой способ.Как отредактировать этот тип оператора switch-case?

switch (minIndex) { 
    case 0: 
     viewOne.setVisibility(View.VISIBLE); 
     break; 
    case 1: 
     viewTwo.setVisibility(View.VISIBLE); 
     break; 
    case 2: 
     viewThree.setVisibility(View.VISIBLE); 
     break; 
    case 3: 
     viewFour.setVisibility(View.VISIBLE); 
     break; 
    case 4: 
     viewFive.setVisibility(View.VISIBLE); 
     break; 
    case 5: 
     viewSix.setVisibility(View.VISIBLE); 
     break; 
} 

Как я могу реорганизовать этот код как более читаемый код?

+0

Не уверен, насколько это практично, но все ссылки на ваши взгляды изменяются в массив. Затем используйте для просмотра ссылки [minIndex]. – initramfs

+1

Хотя я согласен с ответом Сотириоса, но это исходит из предположения. Ваш текущий код дает вам точную логику. Размер кода вряд ли имеет значение, если ваша логика не повреждена. –

ответ

5

Если числа совпадают с реальным видом, вы можете использовать массив.

View[] views = new View[] {viewOne, viewTwo, viewThree, ...}; 
... 
views[minIndex].setVisibility(View.VISIBLE); 
+0

+1 для этого я пропустил разные ссылки. – Batty

+0

@Batty Поздно: p –

+0

@ Sotirios..yups: P – Batty

1

Я предполагаю, что вы анонимно указали свой код для этого сайта. Я собирался предложить, что ответил @Sotirios Delimanolis, но я думаю, что вы на самом деле делаете слишком много и слишком мало.

Вы слишком привязали контроллер к виду, и вы слишком сильно связали взгляды друг с другом. Почему все они должны быть в одном заявлении switch?

Сколько вам нужно изменить, если вы добавите другое представление?

Вместо этого вы должны иметь каждый вид регистрации PropertyChangeListener с объектом, который содержит minindex. Кстати, это плохое имя. Когда объект изменяется minindex, он должен отправить PropertyChangeEvent всем слушателям. Слушатель каждого вида должен проверить, хочет ли событие видеть это видимое; если это так, представление должно пробудиться.

class ViewController { 
    private PropertyChangeSupport pcs = new PropertyChangeSupport(); 

    // delegate methods to add and remove listeners to pcs variable. 

    private int viewIndex; // Changed for documentation. Use String instead? 

    public void setViewIndex(final int viewIndex) { 
     int oldIndex = this.viewIndex; 
     this.viewIndex = viewIndex; 
     pcs.firePropertyChange("viewIndex", oldIndex, this.viewIndex); 
    } 
} 

class ViewOne { 
    private ViewController vc; 
    private final Integer myIndex = 1; 

    // Constructor 

    public void init() { 
     // Never add this or an inner class to another object in a constructor. 
     vc.addPropertyChangeListener("viewIndex", 
      new PropertyChangeListener() { 
       public propertyChange(final PropertyChangeEvent evt) { 
        if (myIndex.equals(evt.getNewValue()) { 
         setVisibility(View.VISIBLE); 
        } 
       } 
      }); 
    } 
} 

Предупреждение о конструкторах в том, что если вы подвергаете this или внутренний класс this к другому объекту в конструкторе, что внешний объект может взаимодействовать с this, прежде чем он полностью построен. Вы можете построить PCL в конструкторе; используйте другой метод, чтобы добавить его в контроллер.

Смежные вопросы