gpt4 book ai didi

android - Gluon 移动应用 NavigationDrawer 后退按钮问题

转载 作者:行者123 更新时间:2023-11-30 01:27:42 24 4
gpt4 key购买 nike

我正在使用 FXML 处理一个多 View 项目,该项目由 IntelliJ 的 Gluon 插件生成。

当我从主视图导航到辅助 View ,并按下我的物理 Android 设备上的后退按钮时,该 View 变回主视图。这是正常行为。

问题是 NavigationDrawer 停留在辅助 View 上。您可以观察到这一点,因为您将无法导航到辅助 View 。当您在导航 Pane 中按下辅助按钮时,什么也没有发生。此行为类似于尝试导航到您当前所在的页面,该页面也不会执行任何操作。

有人知道解决办法吗?这是一个错误吗?报告 Gluon 错误的最佳方式是什么,因为他们不想将所有支持转移到 SO?

最佳答案

NavigationDrawer 基本上是一个带有项目列表的弹出窗口,其中通常每个项目都允许选择一个 View

如果只能通过抽屉访问 View ,那么您不会有任何问题,因为所选项目始终与 Activity View 相关。

当您通过其他方式(例如后退按钮)访问 View 时会出现您遇到的问题。

默认情况下,抽屉列表不会跟踪 Activity View 来自动选择相关项目。如果稍后,您尝试选择一个已被选中的项目,监听器将不会触发 View 切换。

虽然这可以由控件在内部完成(即将到来的版本可能会管理它),但它很容易实现。

只需在您的主类上向 viewProperty() 添加一个监听器,每当 View 发生变化时,就会更新抽屉中的选定项。由于这会触发 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);
});
}

关于android - Gluon 移动应用 NavigationDrawer 后退按钮问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36217473/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com