0

如果您多次更改视图,有时会在 Viewfactory 中创建一个新视图。(顺便说一句,我正在使用 Afterburner,但这不应该是问题)这发生在每台设备(台式机和移动设备)上

以下代码在init方法中

addViewFactory(viewname, () -> {
    return new ExampleView();
})

上面的例子产生了同一个视图的多个实例(这打破了我的一些演示者)

可以在下面看到快速修复,但不是必需的。

ExampleView view = null;
addViewFactory(viewname, () -> {
    if (view == null) {
        view = (View) new ExampleView.getView();
    }else{
        //comment out the line below to see that this is really happening
        //throw new RuntimeException("Created View multiple times");
    }
    return view;
});

编辑:
视图更改仍然发生在 switchView(String)

4

1 回答 1

0

如果您检查任何 Gluon 移动示例,或者如果您使用 Gluon 插件创建一个新项目,您会注意到addViewFactory调用只在方法上完成一次,在init()方法之前调用一次Application.start()

@Override
public void init() {
    addViewFactory(PRIMARY_VIEW, () -> new PrimaryView(PRIMARY_VIEW));
    addViewFactory(SECONDARY_VIEW, () -> new SecondaryView(SECONDARY_VIEW));
}    

在后台,当您调用 时addViewFactory,视图实例被缓存在视图映射中。这保证了您不能多次添加同一个视图,并且您可以随时获取给定视图的实例。

所以你不需要View每次从前一个切换时创建一个,只需调用:

MobileApplication.getInstance().switchView(SECONDARY_VIEW);
于 2016-04-11T13:12:47.930 回答