2015-07-23 2 views
2

У меня есть функция, которая использует кнопку «Назад» на телефонах Android, но по какой-то причине, когда я ее использую, приложение возвращается на 2 страницы вместо предполагаемого.Кнопка Mobile back активируется дважды

Это то, что мой код выглядит на данный момент:

function onBackKeyDown() 
{ 
    currentPage = $.mobile.activePage.attr('id'); 
    if(currentPage == "createUser") 
    { 
     $.mobile.changePage("#logIn"); 
     alert("Return To Login Page"); 
     currentPage = ""; 
    } 
    else if(currentPage == "cardDetails") 
    { 
     $.mobile.changePage("#createUser"); 
     alert("Return To Create User"); 
     currentPage = ""; 
    } 
    else if(currentPage == "mainMenu") 
    { 
     $.mobile.changePage("#logIn"); 
     alert("Return To Log In"); 
     currentPage = ""; 
    } 
    else if(currentPage == "locationPage") 
    { 
     $.mobile.changePage("#mainMenu"); 
     alert("Return To Main Menu"); 
     currentPage = ""; 
    } 
    else if(currentPage == "editUserPage") 
    { 
     $.mobile.changePage("#mainMenu"); 
     alert("Return To Main Menu"); 
     currentPage = ""; 
    } 
    else if(currentPage == "editCardDetailsPage") 
    { 
     $.mobile.changePage("#editUserPage"); 
     alert("Return To Edit User"); 
     currentPage = ""; 
    } 
    else 
     alert("TEST"); 
} 

Например, если бы я быть в cardDetails и я нажал кнопку назад он хотел бы вернуться к createUser и по-прежнему обратно logIn. Есть ли что-нибудь в моем коде, которое могло бы вызвать это, я попытался сбросить текущую страницу на пустой и добавил в другое, думая, что это происходит, хотя каждый из них индивидуально, когда они были только в том случае, если они были только в том случае, если операторы

EDIT: Запрошенный код Java:

import android.os.Bundle; 
import org.apache.cordova.DroidGap; 

public class FnBApp extends DroidGap { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     //setContentView(R.layout.main); 
     super.loadUrl("file:///android_asset/www/index.html"); 
     } 
    } 

Любая помощь будет оценена

Джон

+0

возможно дубликата [Android - Как Override кнопки «Назад», чтобы он не Закончите() мой Activity?] (Http://stackoverflow.com/questions/3141996/android-how-to-override-the-back-button-so-it-doesnt-finish-my-activity) – StephenG

ответ

0

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

удалить ключ слушателя или возвращает истину, если у вас есть Key_Back

вам просто нужно следующее поймать обратно ключ (убедитесь, что не называть супер)

Кроме того, если вы планируете иметь пробег обслуживания в фоновом режиме, убедитесь, что смотреть на startForeground() и убедитесь в том, чтобы иметь постоянное уведомление или андроид будет убить вашу службу, если это необходимо, чтобы освободить память

@Override 
public void onBackPressed() { 
    Log.d("CDA", "onBackPressed Called"); 
    Intent setIntent = new Intent(Intent.ACTION_MAIN); 
    setIntent.addCategory(Intent.CATEGORY_HOME); 
    setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(setIntent); 
} 

обновления: изменения для приложения определенного psuedocode

public class FnBApp extends DroidGap { 
    .... 
    @Override 
    public void onBackPressed() { 
     Log.d("CDA", "onBackPressed Called"); 
     //if super.getUrl shows a specific page: 
     if() { 
      super.loadUrl("file://android_asset/www/index.html#login"); 
     }; 
    } 

Android - How To Override the "Back" button so it doesn't Finish() my Activity?

+0

Могу ли я использовать Java, если я Я использую super.loadUrl для просто Javascript, CSS и HTML в приложении? – John

+0

Вам нужно будет перегрузить эту функцию в java-части приложения. Это невозможно сделать в прямом Javascript – StephenG

+0

Если я перегружу его, он все равно будет работать? Все мое приложение основано на очень минимальной Java и очень тяжело на Javascript. Извините за все вопросы, которые мои знания в Java не так сильны, как Javascript – John

0

Если вы используете Кордову, может быть, вы хотите использовать свой код в других устройствах, кроме Android? В этом случае вы вообще не хотите использовать Java. Возвращаясь к первоначальному вопросу, будет ли эта помощь ?:

function onDeviceReady() { 
    // Register the event listener 
    document.addEventListener("backbutton", onBackKeyDown, false); 
} 

(взято из this post)

+0

Предполагаю, что я должен был заметить, что у меня уже есть deviceready и backbutton Listener. Но я решил свою проблему, просто добавив пользовательские кнопки назад и отключив кнопку «Назад» телефона по большей части. Единственная функция, которую теперь предоставляет кнопка «Назад», - это выйти из приложения, когда пользователь на экране входа в систему – John

Смежные вопросы