Android – onBackPressed()不工作

我有一个应用程序构build对Android 2.1,我想重写后退button

我在这里跟着例子:

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

而我的代码如下:


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

它适用于2.x之前的设备,但不适用于2.1更新-1的英雄和2.2的Nexus One。

我从这个例子中缺less了什么? 或者任何人都可以指出为什么它不工作?

我甚至没有按下logcat中的button。

Solutions Collecting From Web of "Android – onBackPressed()不工作"

你在使用onKeyUp()吗?

在Android 2.x中只使用onKeyDown()或在Android 2.x中使用onBackPressed()

一些快速searchbuild议您应该在onKeyUp()期间放置Back拦截: http : //developer.android.com/sdk/android-2.0.html 。 值得一试。 以下代码直接来自网站:

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

你应该调用父构造函数。

onKeyDown()方法中调用

 super.onKeyDown(); 

并在onBackPressed()

 super.onBackPressed();