[英]Gluon mobile app NavigationDrawer back button issue
我正在處理一個帶有 FXML 的多視圖項目,該項目由 IntelliJ 的 Gluon 插件生成。
當我從主視圖導航到輔助視圖時,我按下物理 android 設備上的后退按鈕,視圖變回主視圖。 這是正常行為。
問題是 NavigationDrawer 停留在輔助視圖上。 您可以觀察到這一點,因為您將無法導航到輔助視圖。 當您在導航窗格中推送次要時,什么也不會發生。 此行為類似於嘗試導航到您當前所在的頁面,但也不會執行任何操作。
有誰知道解決方案? 這是一個錯誤嗎? 為 Gluon 報告錯誤的最佳方式是什么,因為他們不想將所有支持轉移到 SO?
NavigationDrawer
基本上是一個帶有項目列表的彈出窗口,通常這些項目中的每一個都允許選擇一個View
。
如果視圖只能通過抽屜訪問,那么您不會有任何問題,因為所選項目始終與活動視圖相關。
當您通過其他方式(如后退按鈕)訪問視圖時,會出現您遇到的問題。
默認情況下,抽屜列表不會跟蹤活動視圖以自動選擇相關項目。 如果稍后,您嘗試選擇已選擇的項目,則偵聽器將不會觸發視圖切換。
雖然這可以由控件內部完成(傳入版本可能會管理它),但很容易實現。
只需在主類上向viewProperty()
添加一個偵聽器,並且每當視圖發生變化時,更新抽屜上的所選項目。 由於這將觸發navigationDrawer.selectedItemProperty()
的更改,因此在更新選擇之前,我們需要刪除偵聽器,然后再次添加它。
public static final String PRIMARY_VIEW = HOME_VIEW;
public static final String SECONDARY_VIEW = "Secondary View";
public static final String MENU_LAYER = "Side Menu";
private Item primaryItem;
private Item secondaryItem;
private final ChangeListener listener = (obs, oldItem, newItem) -> {
hideLayer(MENU_LAYER);
switchView(newItem.equals(primaryItem) ? PRIMARY_VIEW : SECONDARY_VIEW);
};
@Override
public void init() {
addViewFactory(PRIMARY_VIEW, () -> new PrimaryView(PRIMARY_VIEW).getView());
addViewFactory(SECONDARY_VIEW, () -> new SecondaryView(SECONDARY_VIEW).getView());
NavigationDrawer drawer = new NavigationDrawer();
primaryItem = new Item("Primary", MaterialDesignIcon.HOME.graphic());
secondaryItem = new Item("Secondary", MaterialDesignIcon.DASHBOARD.graphic());
drawer.getItems().addAll(primaryItem, secondaryItem);
primaryItem.setSelected(true);
drawer.selectedItemProperty().addListener(listener);
addLayerFactory(MENU_LAYER, () -> new SidePopupView(drawer));
viewProperty().addListener((obs, ov, nv) -> {
drawer.selectedItemProperty().removeListener(listener);
if (nv.getName().equals(PRIMARY_VIEW)) {
primaryItem.setSelected(true);
secondaryItem.setSelected(false);
drawer.setSelectedItem(primaryItem);
} else {
primaryItem.setSelected(false);
secondaryItem.setSelected(true);
drawer.setSelectedItem(secondaryItem);
}
drawer.selectedItemProperty().addListener(listener);
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.