当一个视图被销毁(阶段关闭,另一个视图取代它等)时,是否有任何方法可以在控制器上调用?也就是说,是否有对应物:
@FXML
private void initialize()
更新:我这样做的原因是我的应用程序正在从PubNub接收消息,然后这些消息需要中继到这些控制器,以便他们可以选择是否采取行动它们与否(它们是否依赖于内部控制器信息,例如视图的大小)。
我的计划是让这些控制器在全局列表中注册,并在销毁时取消注册。
答案 0 :(得分:2)
大多数评论告诉你,JavaFX中没有这样的等效功能。 James_D也提到使用WeakReference
,我认为这是解决问题的好方法。
public final class PubNubManager {
private final List<WeakReference<PubNubListener>> listeners = new ArrayList<>();
// Other standard singleton stuff
public void informListeners(PubNubData data) {
listeners.stream().forEach(listenerRef -> {
if (listenerRef.get() != null)
listenerRef.get().receiveData(data);
});
// You can remove weakreference that are no longer valid, or stop getting for data when there are no more listener.
}
public void registerListener(PubNubListener listener) {
if (listener != null)
listeners.add(new WeakReference<>(listener));
}
// You can make one to unregister too if you want.
}
public interface PubNubListener {
void receiveData(PubNubData data);
}
public class ControllerA implements PubNubListener {
@Override
public void receiveData(PubNubData data) {
// What you need to do
}
}