Android - onBackPressed() not working

孤人 提交于 2019-11-26 09:12:35

问题


I have an application building against Android 2.1 and I want to override the back button.

I have followed the example here:

http://android-developers.blogspot.com/2009_12_01_archive.html

And my code is as follows:


    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)  {
        if (Integer.parseInt(android.os.Build.VERSION.SDK) < 5
                && keyCode == KeyEvent.KEYCODE_BACK
                && event.getRepeatCount() == 0) {
            Log.d(\"CDA\", \"onKeyDown Called\");
            onBackPressed();
        }

        return true;
    }

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

        return;
    }   

It works on pre 2.x devices but doesn\'t work on a Hero with 2.1 update-1 and a Nexus One with 2.2.

Is there somwthing I am missing from the example? Or can anyone point out why it isn\'t working?

I dont even get the button pressed in the logcat.


回答1:


Are you using onKeyUp()?

Use just onKeyDown() in Android 1.x or onBackPressed() in Android 2.x




回答2:


Some quick searching suggests you should place the Back intercept during onKeyUp(): http://developer.android.com/sdk/android-2.0.html. It's worth a try. The following code is directly from the site:

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK
            && event.getRepeatCount() == 0) {
        event.startTracking();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking()
            && !event.isCanceled()) {
        // *** DO ACTION HERE ***
        return true;
    }
    return super.onKeyUp(keyCode, event);
}



回答3:


You should call parent constructors.

In onKeyDown() method call

super.onKeyDown();

and in onBackPressed()

super.onBackPressed();


来源:https://stackoverflow.com/questions/3558385/android-onbackpressed-not-working

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!