我假设你已经匿名了这个网站的代码。我打算建议@Sotirios Delimanolis 回答什么,但我认为你实际上做的太多和太少。
您将控制器绑定到视图太多,并且您将视图彼此绑定太多。为什么它们都应该在同一个switch
语句中?
如果添加另一个视图,您需要更改多少?
相反,您应该让每个视图都PropertyChangeListener
向持有 的对象注册 a 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;使用另一种方法将其添加到控制器。