Gluon Mobile切换视图时如何触发initialize方法执行?
解决Gluon Mobile切换到Home视图时更新内容的问题
方案1:利用视图的activate生命周期回调
Gluon Mobile的View组件自带激活/失活的生命周期回调,每次切换到该视图时都会触发activate事件,刚好可以替代仅执行一次的initialize方法。
步骤如下:
- 在
HomePresenter类中添加激活回调方法:
public void onHomeViewActivate() { // 把原initialize方法中的更新逻辑移到此处,或直接调用你的自定义更新方法 myUpdateToHomeView(); }
- 在对应的
home.fxml文件里,给View标签绑定onActivate属性:
<View fx:id="homeView" onActivate="#onHomeViewActivate" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1"> <!-- 视图内容 --> </View>
此后每次通过view.getAppManager.goHome()切换到Home视图时,onHomeViewActivate方法都会自动执行,完成视图更新。
方案2:获取已初始化的Presenter实例调用更新方法
你之前实例化新HomePresenter导致空指针,是因为新对象的UI控件还未完成FXML绑定。正确做法是获取Gluon已经管理的、初始化完成的Presenter实例:
// 切换到Home视图 view.getAppManager().goHome(); // 获取Home视图的实例 View homeView = MobileApplication.getInstance().getViewManager().getView("home"); // 获取已初始化的Presenter并调用更新方法 HomePresenter homePresenter = (HomePresenter) homeView.getPresenter(); homePresenter.myUpdateToHomeView();
该方法直接复用Gluon创建的Presenter实例,从根源避免空指针问题。
方案3:通过EventBus发送更新事件
利用Gluon的EventBus实现跨视图事件通信,让HomePresenter监听更新事件:
- 在需要触发更新的视图中发送事件:
// 切换视图前/后发送更新事件 MobileApplication.getInstance().getEventBus().publish("REFRESH_HOME_VIEW");
- 在
HomePresenter的initialize方法中订阅事件:
@Override public void initialize(URL url, ResourceBundle resourceBundle) { // 初始化基础逻辑 MobileApplication.getInstance().getEventBus().addEventHandler("REFRESH_HOME_VIEW", event -> { myUpdateToHomeView(); }); }
后续只要发送该事件,HomePresenter就会执行更新操作,适合复杂的跨视图交互场景。
内容的提问来源于stack exchange,提问作者MilckShake Beans
相关产品推荐
相关产品推荐

