带子菜单的导航抽屉
NavigationDrawer with Submenu
我想使用 "afterburner" 在 NavigationDrawer 上实现一些功能,例如子菜单,但我发现了一些问题,最佳做法是什么,是销毁并重新创建带有子菜单的 DefaultNavigationDrawer,还是为每个模块设置一个 NavigationDrawer?
我已经使用了答案代码:
但我的情况更复杂。
谢谢!
您可以从 DefaultNavigationDrawer
获取 NavigationDrawer
对象,然后您可以根据需要添加任意数量的项目(这些只是节点)。
如果这些项目不是 ViewItem
个实例,您将必须注意用户选择它们时要执行的操作。
使用 Glisten-Afterburner 模板,这就是您首先在 AppViewManager::registerViewsAndDrawer
:
中获得抽屉的方式
public static void registerViewsAndDrawer(MobileApplication app) {
for (AppView view : REGISTRY.getViews()) {
view.registerView(app);
}
NavigationDrawer.Header header = new NavigationDrawer.Header("Gluon Mobile",
"Multi View Project",
new Avatar(21, new Image(GluonGAf1.class.getResourceAsStream("/icon.png"))));
DefaultDrawerManager drawerManager = new DefaultDrawerManager(app, header, REGISTRY.getViews()) {
{
// Get the drawer:
NavigationDrawer drawer = getDrawer();
}
};
drawerManager.installDrawer();
}
现在您可以将 NavigationDrawer.Item
添加到其 items
集合中:
public static void registerViewsAndDrawer(MobileApplication app) {
for (AppView view : REGISTRY.getViews()) {
view.registerView(app);
}
NavigationDrawer.Header header = new NavigationDrawer.Header("Gluon Mobile",
"Multi View Project",
new Avatar(21, new Image(GluonGAf1.class.getResourceAsStream("/icon.png"))));
// create items
NavigationDrawer.Item subItem1 = new NavigationDrawer.Item("Sub Item 1", MaterialDesignIcon.ADD.graphic());
NavigationDrawer.Item subItem2 = new NavigationDrawer.Item("Sub Item 2", MaterialDesignIcon.ADD_BOX.graphic());
NavigationDrawer.Item subItem3 = new NavigationDrawer.Item("Sub Item 3", MaterialDesignIcon.ADD_LOCATION.graphic());
DefaultDrawerManager drawerManager = new DefaultDrawerManager(app, header, REGISTRY.getViews()) {
{
// Get the drawer:
NavigationDrawer drawer = getDrawer();
// Add items
drawer.getItems().addAll(new Separator(), subItem1, subItem2, subItem3);
// TODO: provide action based on item selected
drawer.selectedItemProperty().addListener((obs, ov, nv) -> System.out.println("Selected item " + nv));
}
};
drawerManager.installDrawer();
}
你会得到这个:
我想使用 "afterburner" 在 NavigationDrawer 上实现一些功能,例如子菜单,但我发现了一些问题,最佳做法是什么,是销毁并重新创建带有子菜单的 DefaultNavigationDrawer,还是为每个模块设置一个 NavigationDrawer?
我已经使用了答案代码:
但我的情况更复杂。
谢谢!
您可以从 DefaultNavigationDrawer
获取 NavigationDrawer
对象,然后您可以根据需要添加任意数量的项目(这些只是节点)。
如果这些项目不是 ViewItem
个实例,您将必须注意用户选择它们时要执行的操作。
使用 Glisten-Afterburner 模板,这就是您首先在 AppViewManager::registerViewsAndDrawer
:
public static void registerViewsAndDrawer(MobileApplication app) {
for (AppView view : REGISTRY.getViews()) {
view.registerView(app);
}
NavigationDrawer.Header header = new NavigationDrawer.Header("Gluon Mobile",
"Multi View Project",
new Avatar(21, new Image(GluonGAf1.class.getResourceAsStream("/icon.png"))));
DefaultDrawerManager drawerManager = new DefaultDrawerManager(app, header, REGISTRY.getViews()) {
{
// Get the drawer:
NavigationDrawer drawer = getDrawer();
}
};
drawerManager.installDrawer();
}
现在您可以将 NavigationDrawer.Item
添加到其 items
集合中:
public static void registerViewsAndDrawer(MobileApplication app) {
for (AppView view : REGISTRY.getViews()) {
view.registerView(app);
}
NavigationDrawer.Header header = new NavigationDrawer.Header("Gluon Mobile",
"Multi View Project",
new Avatar(21, new Image(GluonGAf1.class.getResourceAsStream("/icon.png"))));
// create items
NavigationDrawer.Item subItem1 = new NavigationDrawer.Item("Sub Item 1", MaterialDesignIcon.ADD.graphic());
NavigationDrawer.Item subItem2 = new NavigationDrawer.Item("Sub Item 2", MaterialDesignIcon.ADD_BOX.graphic());
NavigationDrawer.Item subItem3 = new NavigationDrawer.Item("Sub Item 3", MaterialDesignIcon.ADD_LOCATION.graphic());
DefaultDrawerManager drawerManager = new DefaultDrawerManager(app, header, REGISTRY.getViews()) {
{
// Get the drawer:
NavigationDrawer drawer = getDrawer();
// Add items
drawer.getItems().addAll(new Separator(), subItem1, subItem2, subItem3);
// TODO: provide action based on item selected
drawer.selectedItemProperty().addListener((obs, ov, nv) -> System.out.println("Selected item " + nv));
}
};
drawerManager.installDrawer();
}
你会得到这个: