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

She*_*har 128 android

如何处理活动中的后退按钮.我有一些按钮.如果我单击其中一个按钮,它将重定向到我需要的按钮.它工作正常,但当我按下后退按钮它完成.

如何解决这个问题呢.所有这些按钮只有一个活动.提前致谢.

@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);
}
Run Code Online (Sandbox Code Playgroud)

我已经使用上面的代码处理后退按钮,但它无法正常工作.当我按下后退按钮时,它会自动敲击.

Sau*_*eek 311

你可以像这样处理它:

适用于API等级5及更高版本

@Override
public void onBackPressed() {
    // your code.
}
Run Code Online (Sandbox Code Playgroud)

比API 5更早

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

    return super.onKeyDown(keyCode, event);
}
Run Code Online (Sandbox Code Playgroud)

  • 碎片怎么样? (6认同)
  • @james-wierzba处理活动并委托处理片段 (2认同)

Ric*_*tes 18

除了以上我个人推荐

onKeyUp():
Run Code Online (Sandbox Code Playgroud)

Programatically 当用户最初按下一个键时,发出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);
}
Run Code Online (Sandbox Code Playgroud)


S b*_*uce 13

对于硬件设备后退按钮和软主页(后退)按钮,例如"< - ",这对我有用.(*注意我在活动中有一个应用栏/工具栏)

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

}
Run Code Online (Sandbox Code Playgroud)

干杯!

  • "finish()" 仅关闭您当前的活动。您需要使用 Intent 处理返回到之前的活动。顺便说一句,如果您之前从它导航时没有“完成()”它,那么您之前的活动应该仍然处于打开状态。 (2认同)

Ume*_*cha 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);
}
Run Code Online (Sandbox Code Playgroud)

Android 2.0引入了一个新的onBackPressed方法,并且这些建议如何处理Back按钮


net*_*ein 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;
}
Run Code Online (Sandbox Code Playgroud)

如此处所定义:http://android-developers.blogspot.com/2009/12/back-and-other-hard-keys-three-stories.html

如果您使用的是旧版本来编译代码,请将android.os.Build.VERSION_CODES.ECLAIR替换为5(例如,您可以添加名为ECLAIR的私有int)