2

我有一个使用 Android 手机上的后退按钮的功能,但由于某种原因,当我使用它时,应用程序会返回 2 页而不是预期的页面。

这是我的代码目前的样子:

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。我的代码中有什么会导致这种情况吗,我尝试将 currentPage 重置为空并添加到 else 中,认为当它们只是 if 语句时,它们会单独通过它们

编辑:请求的 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");
        }
    }

任何帮助,将不胜感激

约翰

4

2 回答 2

0

如果您使用的是 Cordova,也许您想在除 Android 之外的其他设备上使用您的代码?在这种情况下,您根本不想使用任何 Java。回到最初的问题,这有帮助吗?:

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

(取自这篇文章

于 2015-07-25T20:41:57.700 回答
0

您需要重载 android 后退按钮,而不是仅仅检测和操作它。

当你有 KEY_BACK 时删除你的关键监听器或返回 true

您只需要以下内容即可获取密钥(确保不要调用超级)

此外,如果您计划在后台运行服务,请确保查看 startForeground() 并确保有持续的通知,否则如果需要释放内存,android 将终止您的服务

@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);
}

更新:应用程序特定伪代码的更改

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 - 如何覆盖“后退”按钮,使其不会完成()我的活动?

于 2015-07-23T16:34:23.333 回答