如何处理活动中的后退按钮。我有一些按钮。如果我单击其中一个按钮,它将重定向到我需要的按钮。它工作正常,但当我按下后退按钮时,它就完成了。
如何解决这个问题。所有这些按钮只有一个活动。 提前谢谢。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if ((keyCode == KeyEvent.KEYCODE_BACK))
{
return false; //I have tried here true also
}
return super.onKeyDown(keyCode, event);
}
我已经使用上面的代码来处理后退按钮,但它不起作用。当我按下后退按钮时,它会自动敲击。
答案 0 :(得分:299)
您可以这样处理:
适用于API级别5及更高级别的
@Override
public void onBackPressed() {
// your code.
}
早于API 5
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
// your code
return true;
}
return super.onKeyDown(keyCode, event);
}
答案 1 :(得分:16)
除了以上我个人推荐
onKeyUp():
以编程方式说话 keydown会在用户最初按下某个键但 时重复,同时用户按下该键。 *
所有开发平台都是如此。
Google开发建议,如果您在视图中拦截BACK按钮,则应在keydown上使用starttracking跟踪KeyEvent,然后使用keyup调用。
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()) {
// *** Your Code ***
return true;
}
return super.onKeyUp(keyCode, event);
}
答案 2 :(得分:11)
对于硬件设备后退按钮和软主页(后退)按钮,例如“< - ”这对我有用。 (*注意我在活动中有一个应用栏/工具栏)
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
//finish();
onBackPressed();
break;
}
return true;
}
@Override
public void onBackPressed() {
//Execute your code here
finish();
}
干杯!
答案 3 :(得分:9)
更简单的方法是按下Back按钮并调用moveTaskToBack(true),如下所示:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
moveTaskToBack(true);
return true;
}
return super.onKeyDown(keyCode, event);
}
Android 2.0引入了一个新的onBackPressed方法,these recommendations介绍了如何处理Back按钮
答案 4 :(得分:9)
您应该使用:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.ECLAIR
&& keyCode == KeyEvent.KEYCODE_BACK
&& event.getRepeatCount() == 0) {
// Take care of calling this method on earlier versions of
// the platform where it doesn't exist.
onBackPressed();
}
return super.onKeyDown(keyCode, event);
}
@Override
public void onBackPressed() {
// This will be called either automatically for you on 2.0
// or later, or by the code above on earlier versions of the
// platform.
return;
}
如此处所定义:http://android-developers.blogspot.com/2009/12/back-and-other-hard-keys-three-stories.html
如果您使用旧版本编译代码,请将android.os.Build.VERSION_CODES.ECLAIR替换为5(例如,您可以添加名为ECLAIR的私有int)
答案 5 :(得分:1)
这帮助了我..
@Override
public void onBackPressed() {
startActivity(new Intent(currentActivity.this, LastActivity.class));
finish();
}
OR ????? 甚至你也可以用它来抽屉切换
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
startActivity(new Intent(currentActivity.this, LastActivity.class));
finish();
}
我希望这会对你有所帮助.. :)
答案 6 :(得分:0)
这是做事的简单方法。
@Override
public void onBackPressed() {
// do what you want to do when the "back" button is pressed.
startActivity(new Intent(Activity.this, MainActivity.class));
finish();
}
我认为可能会有更多精心设计的方法,但是我喜欢简单。例如,我使用上面的模板使用户退出应用程序,然后返回到我选择的另一个活动。