PhoneGap + jQueryMobile: кнопка возврата Android закрывает приложение во вложенном списке - PullRequest
7 голосов
/ 24 ноября 2011

Я создаю приложение, используя PhoneGap и jQuery Mobile.

Используя jQuery Mobile, я создал вложенный список.

После нажатия на вложенный список я хочу вернуться назад.Я ожидаю, что при нажатии кнопки «Назад» на моем устройстве Android ( Nokia N1 ) он вернется на один уровень назад.

Но вместо этого Android закрывает приложение, а не поднимается на один уровень вверх.

Я использую PhoneGap 1.2.0, jQuery Mobile v1.0rc2, jQuery 1.6.4 и Android 2.3.3 (Gingerbread).

Я также обновился до jQuery Mobile 1.0, и естьбез изменений.

Ответы [ 6 ]

11 голосов
/ 24 ноября 2011

Вы можете прослушивать события кнопки возврата:

document.addEventListener("backbutton", onBackKeyDown, false);

function onBackKeyDown() {
    // Handle the back button
}

И если текущая страница является домашней страницей ($.mobile.activePage в jQuery Mobile), выйдите из приложения с помощью:

navigator.app.exitApp();
8 голосов
/ 24 ноября 2011

У меня такая же проблема.Я узнал, как обрабатывать кнопку «Назад» в коде Java.

Если это возможно, выполняется возврат на один шаг назад, или же выход из приложения.

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
  if (keyCode == KeyEvent.KEYCODE_BACK) {
    if(appView.canGoBack()){
       appView.goBack();
        return true;
    }
  }
  return super.onKeyDown(keyCode, event);
}

Это также возможно сделатьсторона JavaScript:

document.addEventListener("backbutton", function() {
    //Logic//
}, false);
2 голосов
/ 27 августа 2012

Для тех, кто пришел сюда, потому что приложение закрывается после того, как было в текстовом поле и нажата кнопка «Назад»:

В Android 4.0.3 (ICS) вам не нужно переопределять backButton с помощью PhoneGap API, чтобы остановить закрытие / сбой приложения после того, как вы сфокусировали поле ввода текста, а затем нажали кнопку возврата. Обычно это закрывает приложение, потому что WebKit создает подсветку касания с дополнительным контуром, который нельзя изменить с помощью CSS.

Когда вы фокусируете ввод, появляется программная клавиатура. Когда вы нажимаете в первый раз кнопку BackBut, ваша программная клавиша исчезает. При повторном нажатии для возврата в историю навигации приложение закрывается, вместо того чтобы перейти на страницу, которую вы посетили ранее. Это потому, что выделение выпрыгивает из структуры навигации. Кажется, что это не в DOM. Я не очень понимаю это поведение. Вот решение:

Просто добавьте

input {
-webkit-user-modify: read-write-plaintext-only
}

Это прерывает webkit, делая выделение касанием, и вы все еще остаетесь в приложении и можете вернуться в историю с вашей (не переопределенной) кнопкой BackButton.

2 голосов
/ 15 июля 2012

Также попробуйте:

function onBackKeyDown(e) {
    e.preventDefault();

    if ($.mobile.activePage.attr('id') == 'main') {
         <!-- navigator.app.exitApp(); -->
         device.exitApp();
    }
    else {
         history.back(1);
    } 
}
1 голос
/ 19 октября 2012

Я пришел сюда из-за проблемы с кнопкой «Назад» внутри текстового поля (input или textarea) в приложении Cordova / PhoneGap, которое не вызывает нормальное поведение (в моем случае это не так вызвать мой обработчик JavaScript).

К сожалению, указанное выше решение с использованием CSS не работает на Android 2.3.

И выбранного решения, которое переопределяет событие в Java, мне недостаточно, потому что мне нужно запустить обработчик JavaScript, а не возвращаться в веб-просмотр. Кроме того, это решение переопределяет стандартное поведение Cordova, что не является наилучшей практикой, поскольку оно теряет другие встроенные функции.

Итак, я сделал (и это сработало) переопределение события KeyUp, как указано выше, но вместо того, чтобы переопределить его, я просто вызвал обработчик в appVIew (который является реализацией Cordova).

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    return appView.onKeyUp(keyCode, event);
}
0 голосов
/ 24 ноября 2011

Это проблема использования таких вещей, как PhoneGap. Они создают приложения так, как не работает Android.

Кнопка «Назад» отображает последнюю активность стека активности. Поскольку у вас есть целое приложение, которое выглядит как несколько действий, на самом деле это одно действие с наложениями. То, что вы должны будете сделать, и имейте это в виду, это не совсем правильный способ делать вещи.

Вам придется прагматично переопределить функциональность кнопки «Назад», чтобы она могла вернуться в стеки jQuery, а затем, когда единственное, что осталось, - это плоское приложение Android, вернитесь и к этому. Я не знаю, позволяет ли PhoneGap так сильно контролировать систему Android, но по умолчанию ОС Android не будет нормально работать с вашим списком jQuery.

Надеюсь, это поможет понять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...