移动后退按钮激活两次

时间:2015-07-23 16:28:13

标签: javascript android cordova back-button-control

我有一个使用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重置为空并添加在其他内容中,认为当它们只是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");
        }
    }

任何帮助将不胜感激

约翰

2 个答案:

答案 0 :(得分: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 - How To Override the "Back" button so it doesn't Finish() my Activity?

答案 1 :(得分:0)

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

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

(摘自this post