MobileApplication.viewProperty
以前の/現在のを追跡するためにリスナーをアタッチした Service クラスがありView
ます。別の に戻ると、View
this の名前を確認して、View
それに応じていくつかのタスクを実行したいと考えています。ビューonHidden
ハンドラーでviewProperty
は、新しいビューの値で既に更新されていますが、Service クラスのリスナーは の後にのみ呼び出されonHidden
ます。この理由は何でしょうか?
public class GluonApplication extends MobileApplication {
private static final String SECONDARY_VIEW = "secondary";
private String previousView;
private String currentView;
@Override
public void init() {
addViewFactory(HOME_VIEW, () ->
{
Button btn = new Button("next view");
btn.setOnAction(e -> switchView(SECONDARY_VIEW));
View view = new View(new StackPane(btn)) {
@Override
protected void updateAppBar(AppBar appBar) {
appBar.setTitleText("Home");
}
};
return view;
});
addViewFactory(SECONDARY_VIEW, () ->
{
Button btnBack = new Button("go back");
btnBack.setOnAction(e -> switchView("home"));
View view = new View(new StackPane(btnBack)) {
{
setOnHidden(e ->
{
System.out.println("viewProperty: " + viewProperty().get().getName() + " viewListener:" + currentView);
if (currentView.equals("myView")) {
// action
}
});
}
@Override
protected void updateAppBar(AppBar appBar) {
appBar.setTitleText("Secondary");
}
};
return view;
});
viewProperty().addListener((ov, v, v1) ->
{
if (v != null) {
previousView = v.getName();
}
currentView = v1.getName();
System.out.println("listener previousView: " + previousView + " view: " + currentView);
});
}
@Override
public void postInit(Scene scene) {
((Stage) scene.getWindow()).setAlwaysOnTop(true);
}
}