View создается несколько раз с помощью Gluon

Если вы меняете представление несколько раз, иногда в 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)

1 ответ

Если вы проверите любой из мобильных образцов 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);
Другие вопросы по тегам