FxActivity.onBackPressed javafxport не вызывается

Я использую javafxports для запуска моего приложения javafx на основе gradle на Android. С помощью jfxmobile-plugin приложение упаковано в один apk файл и работает нормально. Чтобы переопределить обратное нажатие FxActivity, я попытался расширить этот класс и добавить свой собственный класс Activity.

public class MyActivity extends FxActivity
{
    @Override
    public void onBackPressed()
    {
        System.out.println("onBackPressed");
        super.onBackPressed();
    }

}

Я добавил полное имя класса MyActivity в AndroidManifest.xml, и снова приложение работает нормально, за исключением того, что когда я нажимаю кнопку «Назад» на Android, я не вижу распечатываемого сообщения «onBackPressed». Есть еще одно сообщение, которое показывает, что кнопка «Назад» нажата и обрабатывается каким-то классом jfxrt.jar или чем-то еще. Сообщение выглядит так:

my.sample.package.name  I/System.out(16507): KeyEvent: KeyEvent { action=ACTION_UP, keyCode=KEYCODE_BACK, scanCode=0, metaState=0, flags=0x48, repeatCount=0, eventTime=144078131, downTime=144078016, deviceId=-1, source=0x101 } with action = 1

Кто-нибудь знает, как переопределить onBackPressed таким образом, чтобы он работал? Еще один вопрос, который у меня есть, заключается в том, что именно javafxports делает, чтобы закрыть этап javafx при обратном нажатии?

ИЗМЕНИТЬ:

Другой вопрос:

У меня есть два разных приложения для Android javafxports, имя G и B; Эти два приложения имеют одинаковые файлы build.gradle, за исключением разделов зависимостей. Приложение G имеет несколько зависимостей, таких как

dependencies {
compile 'org.reflections:reflections:0.9.10'
compile 'org.dom4j:dom4j:2.0.0'
compile 'com.jfoenix:jfoenix:1.0.0'
compile 'com.gluonhq:charm:2.1.1'
androidRuntime 'com.gluonhq:charm-android:2.1.1'
}

Однако приложение B имеет много зависимостей, которые в основном являются моими собственными подпроектами; Но B не зависят от этих двух конкретных артефактов.

 compile 'com.gluonhq:charm:2.1.1'
 androidRuntime 'com.gluonhq:charm-android:2.1.1'

При обратном нажатии приложение G выходит на Android Home, как и ожидалось. Однако приложение B не реагирует на событие обратного нажатия на Android, хотя сообщение, подобное упомянутому выше, распечатывается на экране монитора Android.

Я хочу знать, почему B игнорирует событие обратного нажатия?


person Amin    schedule 22.12.2016    source источник
comment
См. этот вопрос и этот one   -  person José Pereda    schedule 22.12.2016
comment
@JosePeda, ты снова и снова помогаешь мне. Надеюсь, вы поможете мне и в следующем: у меня есть два приложения javafxports для Android. Ни в одном из этих приложений я не устанавливал прослушиватель ключей для объекта сцены. Однако один из них не реагирует на нажатие спины андроида, а другой реагирует. Ожидаемый ответ — завершить приложение и вернуться на главную страницу Android. Но это не относится ко второму приложению. Возможно, я смогу поймать спину, используя предложенный вами способ, и выполнить завершение FxActivity.getInstance(), однако я думаю, что это должно быть поведение по умолчанию.   -  person Amin    schedule 22.12.2016
comment
Вместо того, чтобы начинать новый или дополнительный вопрос в комментарии, отредактируйте свой вопрос или создайте новый и опубликуйте некоторые из них, чтобы мы могли увидеть разницу между обоими приложениями.   -  person José Pereda    schedule 22.12.2016
comment
Я сделал так же, как вы руководство.   -  person Amin    schedule 22.12.2016


Ответы (1)


Прежде всего, зависимости Gluon Charm, которые вы используете, довольно старые. Текущая версия 4.2.0. Я предлагаю вам также обновить подключаемый модуль Gluon IDE до текущей версии 2.5.0, так как он будет генерировать актуальный скрипт build.gradle.

Как показано в этом вопросе, кнопка "Назад" Android сопоставлена ​​с Клавиша ESCAPE, а Charm реализует прослушиватель ключевых событий, поэтому мы можем переключать представления или закрывать слои.

Также Charm реализует плагин Charm Down lifecycle (см. application">вопрос), а если текущим представлением является домашний вид, нажатие кнопки "Назад" Android приводит к завершению действия/приложения.

Поскольку вы не используете зависимости Charm в B, это не сработает, если вы его не реализуете.

person José Pereda    schedule 22.12.2016
comment
Спасибо. Я не использую обаяние в своих проектах. Для проекта Android я должен вызывать javafx.Platform.exit вместе с вызовом FxActivity.getInstance().finish()? Или достаточно вызвать метод Finish? - person Amin; 24.12.2016
comment
Вы можете ознакомиться с реализацией жизненного цикла для Android. - person José Pereda; 24.12.2016
comment
Да я это уже сделал. Почему нет Platform.exit для Android? Конечно, activity.finish завершит приложение на более высоком уровне, я предлагаю на платформе. выход из операции завершения будет выполняться автоматически. Что, если кто-то как чистый программист javafx вызовет Platform.exit, не закончив действие? - person Amin; 24.12.2016
comment
Platform.exit не будет работать на Android. Вот почему нам нужен вызов lifecycle::shutdown. - person José Pereda; 24.12.2016