Я предполагаю, что вы анонимно указали свой код для этого сайта. Я собирался предложить, что ответил @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 в конструкторе; используйте другой метод, чтобы добавить его в контроллер.
Не уверен, насколько это практично, но все ссылки на ваши взгляды изменяются в массив. Затем используйте для просмотра ссылки [minIndex]. – initramfs
Хотя я согласен с ответом Сотириоса, но это исходит из предположения. Ваш текущий код дает вам точную логику. Размер кода вряд ли имеет значение, если ваша логика не повреждена. –