如何处理活动中的后退按钮

如何处理活动中的后退按钮?我有一些纽扣。如果我点击其中一个按钮,它会重定向到我需要的按钮。它工作得很好,但是当我按下后退按钮时,它就完成了。

如何解决这个问题? 我只有一个活动,所有这些按钮。

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

我已经用上述代码处理后退按钮,但它不工作。当我按下后退按钮,它自己就出现了。

328877 次浏览

你可以这样处理:

空气污染指数级别5及以上

@Override
public void onBackPressed() {
// your code.
}

空气污染指数5以上

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
// your code
return true;
}


return super.onKeyDown(keyCode, event);
}

一种更简单的方法是捕获 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引入了一个新的 onBackPress 方法,以及关于如何处理 Back 按钮的 这些建议

你应使用:

@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。版本代码。ECLAIR by 5(例如,您可以添加一个名为 ECLAIR 的私有 int)

除了以上我个人推荐

onKeyUp():

程序说话 当用户最初按下一个键时,keydown 将触发 < strong > 但是 It < strong > 将 重复,而用户保持按下键。 *

对于所有的开发平台来说,这仍然是正确的。

Google 开发人员建议,如果在视图中拦截 BACK 按钮,应该通过 keydown 上的 start 跟踪跟踪 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);
}

这对我有帮助。

@Override
public void onBackPressed() {
startActivity(new Intent(currentActivity.this, LastActivity.class));
finish();
}

或者你甚至可以使用这个抽屉切换也

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


}

对于硬件设备的返回按钮和软回家(返回)按钮,例如“ <-”这是什么工作对我来说。

(* 注意,我在活动中有一个应用程序栏/工具栏)

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


}

这是做某事的一种简单方法。

    @Override
public void onBackPressed() {
// do what you want to do when the "back" button is pressed.
startActivity(new Intent(Activity.this, MainActivity.class));
finish();
}

我认为可能有更详细的方法来处理它,但我喜欢简单。例如,我使用上面的模板使用户在应用程序外签名,然后返回到我选择的另一个活动。

intent = Intent(this@activity2,activity1::class.java)
startActivity(intent)