Je crée une application utilisant PhoneGap et JQuery Mobile. P>
Utilisation de JQuery Mobile j'ai créé une liste imbriquée. P>
Après avoir cliqué sur la liste imbriquée, je veux revenir en arrière. Je m'attends à ce que cliquer sur le bouton arrière de mon appareil Android ( Nokia N1 ) qu'il reviendra un niveau. p>
Mais à la place, Android ferme l'application au lieu de remonter un niveau. P>
J'utilise PhoneGap 1.2.0, JQuery Mobile V1.0RC2, JQuery 1.6.4 et Android 2.3.3 (Gingerbread). P>
J'ai également mis à niveau vers JQuery Mobile 1.0, et il n'y a pas de changement. P>
6 Réponses :
C'est le problème de l'utilisation de choses comme PhoneGap. Ils construisent des applications la façon dont Android ne fonctionne pas. P>
Le bouton arrière apparaît la dernière activité de la pile d'activités. Comme vous avez une application entière qui ressemble à plusieurs activités, c'est en fait une seule activité avec des superpositions. Ce que vous devrez faire et garder à l'esprit cela, ce n'est pas vraiment la bonne façon de faire des choses. p>
Vous devrez remplacer de manière pragmatique de la fonctionnalité du bouton arrière pour l'obtenir pour revenir dans les piles de jQuery, puis une fois que l'application plate Android est la seule chose qui reste, y retourne aussi. Je ne sais pas si PhoneGap vous permet d'avoir autant de contrôle sur le système Android, mais par défaut, le système d'exploitation Android n'agira pas normalement avec votre liste de jQuery. P>
J'espère que cela donne une idée. P>
J'ai le même problème. J'ai découvert comment gérer le bouton arrière du code Java.
Ceci remonte une étape si possible ou disparaît l'application. P>
document.addEventListener("backbutton", function() { //Logic// }, false);
Cela a travaillé au moins pour ce que je voulais que cela fasse. Maintenant, le bouton arrière effectue avec succès une liste imbriquée montez un niveau.
Hey Rob, merci pour la grande réponse. On dirait que Flatlineato a peut-être répondu à votre question de suivi ci-dessous avec sa réponse ($ .mobile.activepage vous donne la page actuelle).
En outre, juste pour clarification: le code Rob fourni passe à l'intérieur de la classe Java assis dans votre dossier SRC qui étend la classe "DROIDGAP". Vous devriez déjà avoir une méthode appelée "Oncreate". :)
Pourquoi devons-nous remplacer cela? Pourquoi est-ce que ce n'est-il pas le comportement par défaut? 99% du scénario que nous utilisons le bouton arrière pour revenir en arrière (jusqu'à ce que nous ne puissions pas), n'est-ce pas?
@VDP Android Button Button Button Activités. Votre application Phonegap n'est qu'un. Donc, le comportement par défaut serait (à juste titre) de fermer votre application. Et parce qu'il n'y a pas d'activité précédente, vous reviendrez sur votre écran d'accueil. Je suis d'accord que ce comportement n'est pas vraiment «natif», mais je suppose que PG veut jouer le moins possible avec un comportement normal Android. (Qui, à la fin, la plupart des développeurs recherchent.)
@Rob, vous avez raison dans la plupart des cas. Mais dans ce cas, nous utilisons fondamentalement PhoneGap pour créer des applications, au sens large. Et les applications ont plusieurs activités. Comme cela est unique à l'architecture d'Android, peut-être que PhoneGap devrait inclure ce petit patch. Je ne pense pas que cela va interférer avec le comportement de Android, mais nous donne plutôt une voie à imiter plusieurs activités - ce que nous voulons fondamentalement faire lors de la création d'une application multiple.
Vous aurez également importé "KeyEvent" pour gérer l'événement ... "Importer Android.View.Keyevent;"
Vous pouvez écouter les événements de bouton arrière: et si la page en cours est la page d'accueil ( $. Mobile.acacagePage code> dans jQuery mobile) sortie de l'application avec: p>
La plupart des gens semblent répondre à cette question en mentionnant seulement comment attraper le bouton arrière, vous obtenez donc +1 pour expliquer quoi faire après sa prise. Si nous devions gérer manuellement l'historique de navigation de l'application, cela peut avoir été accepté comme bonne réponse. Cependant, Rob's Solution obtient l'application qui fonctionne comme Android natif sans la nécessité d'une micromane. Pourtant, j'ai trouvé les informations dans cette réponse utile, alors merci!
Essayez également:
function onBackKeyDown(e) { e.preventDefault(); if ($.mobile.activePage.attr('id') == 'main') { <!-- navigator.app.exitApp(); --> device.exitApp(); } else { history.back(1); } }
Pour ceux qui sont venus ici parce que l'application se ferme après avoir été classée de texte ciblée et en appuyant sur le Backbutton:
dans Android 4.0.3 (ICS) Vous n'avez pas à remplacer Backbutton avec l'API Phonegap pour arrêter la fermeture / Crasturation de l'application après avoir concentré un champ de texte d'entrée, puis appuyez sur la touche arrière. Normalement, cela ferme l'application, car WebKit crée une mise en surbrillance avec un contour supplémentaire qui ne peut pas être modifié avec CSS. P>
Lorsque vous concentrez l'entrée. Lorsque vous appuyez sur la première fois, le Backbutton, votre touche programmable disparaît. Lorsque vous cliquez à nouveau pour revenir dans l'historique de navigation, l'application se ferme au lieu de sauter à la page visitée auparavant. C'est parce que les sauts de surbrillance de la structure de la navigation. Il semble que ce ne soit pas dans le DOM. Je ne comprends pas vraiment ce comportement. Voici la solution: p>
Il suffit d'ajouter p> Ceci interrompt webkit faisant une touche de tape et vous restez toujours dans l'application et peut toujours revenir en histoire et peut revenir en histoire. avec votre backbutton (non remplacé). p> p>
Je suis venu ici à cause du problème avec le bouton arrière à l'intérieur d'un champ de texte ( Malheureusement, la solution ci-dessus utilisant CSS ne fonctionne pas sur Android 2.3. P> et la solution choisie, qui remplace l'événement En Java, ne me suffit pas, car j'ai besoin de déclencher un gestionnaire JavaScript, ne pas revenir dans le webview. En outre, cette solution consiste à réimplémenter le comportement de Cordoue par défaut, qui n'est pas la meilleure pratique, car elle perd d'autres caractéristiques intégrées. P> Donc, ce que j'ai fait (et cela fonctionnait) a été remplacé par l'événement de la clé de clés ci-dessus, mais au lieu de le réimplémenter, je viens d'appeler le gestionnaire de l'AppView (qui est la mise en œuvre de CORDOVA). P> entrée code> ou
textarea code>) dans une application Cordova / Phonegap qui ne déclenche pas la normale comportement (dans mon cas, il ne déclenche pas mon gestionnaire JavaScript).
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
return appView.onKeyUp(keyCode, event);
}
J'ai commencé à remarquer ce problème une fois que j'ai changé de téléphones 1.1.0 à PhoneGap 1.2.0, alors je parie que c'est le coupable.