在android中禁用后退按钮

Gra*_*ace 321 android button back onbackpressed

如何在注销应用程序时禁用android中的后退按钮?

Gop*_*ath 636

如果您打算处理设备上的后退按钮,则覆盖onBackPressed方法并且不执行任何操作.

@Override
public void onBackPressed() {
   if (!shouldAllowBack()) {
       doSomething();
   } else {
       super.onBackPressed();
   }
}
Run Code Online (Sandbox Code Playgroud)

  • 这比覆盖密钥处理方法更好,更清晰,并且具有相同的效果.很棒的答案! (12认同)
  • 伟大的解决方案伙计.用主页按钮有没有办法做到这一点? (2认同)

Jav*_*tor 163

如果寻找android api级别高达1.6.

@Override
public void onBackPressed() {
    // Do Here what ever you want do on back press;
}
Run Code Online (Sandbox Code Playgroud)

如果寻找更高的api级别2.0及以上,这将是很好的

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
     if (keyCode == KeyEvent.KEYCODE_BACK) {
     //preventing default implementation previous to android.os.Build.VERSION_CODES.ECLAIR
     return true;
     }
     return super.onKeyDown(keyCode, event);    
}
Run Code Online (Sandbox Code Playgroud)

在您的Activity中编写此代码以防止按下后退按钮

  • 由于onbackpressed的api级别要求,此方法比使用onbackpressed更向后兼容 (5认同)
  • 很好的答案.虽然我的项目并不需要它,但我很欣赏您提供了新旧方法.这应该标记为正确答案.+1 (4认同)

Ima*_*shi 34

你可以这么简单的方法不要调用super.onBackPressed()

注意: - 除非您有充分理由这样做,否则请勿这样做.

@Override
public void onBackPressed() {
// super.onBackPressed();
// Not calling **super**, disables back button in current screen.
}
Run Code Online (Sandbox Code Playgroud)

  • 关于"为什么不"的解释会很棒.谢谢. (5认同)
  • @almostabeginner,因为不调用super将使后退按钮的正常使用无效。当正常工作的按钮停止工作时,用户会感到恐惧。他们可能会认为该应用有故障或手机出现故障等。您的应用最终将是罪魁祸首。 (2认同)

Pan*_*mar 22

只需覆盖onBackPressed()方法即可.

@Override
public void onBackPressed() { }
Run Code Online (Sandbox Code Playgroud)


小智 13

我正在使用它.............

 @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if(keyCode==KeyEvent.KEYCODE_BACK)
        Toast.makeText(getApplicationContext(), "back press",      
     Toast.LENGTH_LONG).show();

    return false;
       // Disable back button..............
}
Run Code Online (Sandbox Code Playgroud)


Ste*_*zyk 9

如果你想确保你的android客户端应用程序在你的Activity被杀之前从某个服务器注销 - >在自己的线程上注销一个服务(这就是你应该做的事情).

禁用后退按钮不会为您解决任何问题.例如,当用户接到电话时,您仍会遇到同样的问题.收到电话后,您的活动在从网络获得可靠答案之前有大约相同的被杀机会.

这就是为什么你应该让服务在自己的线程上等待来自网络的答案,然后如果它没有成功再试一次.Android服务不仅在获得回复之前被杀死的可能性要小得多,但如果它在完成作业之前真的被杀死了,它总是会被AlarmManager重新启动以再次尝试.


Zak*_*ain 8

只需覆盖onBackPressed()方法,无需调用onBackPressed方法的超类或其他方法.

@Override
public void onBackPressed()
{

}
Run Code Online (Sandbox Code Playgroud)

或者将当前活动传递给onBackPressed()方法.

@Override
public void onBackPressed()
{
   startActivity(new Intent(this, myActivity.class));  
   finish();
}
Run Code Online (Sandbox Code Playgroud)

将您的require活动名称替换为myActivity.

如果你正在使用片段,那么首先调用callParentMethod()方法

public void callParentMethod(){
    context.onBackPressed(); // instead of context use getActivity or something related
}
Run Code Online (Sandbox Code Playgroud)

然后调用空方法

@Override
public void onBackPressed()
{

}
Run Code Online (Sandbox Code Playgroud)


Ama*_*wal 7

您可以覆盖onBackPressed()活动中的方法并删除对超类的调用。

@Override
public void onBackPressed() {
  //remove call to the super class
  //super.onBackPressed();
}
Run Code Online (Sandbox Code Playgroud)


has*_*ash 6

如果你正在使用FragmentActivity.然后这样做

第一次打电话给你Fragment.

public void callParentMethod(){
    getActivity().onBackPressed();
}
Run Code Online (Sandbox Code Playgroud)

然后onBackPressed在父FragmentActivity类的旁边调用方法.

@Override
public void onBackPressed() {
  //super.onBackPressed();
  //create a dialog to ask yes no question whether or not the user wants to exit
  ...
}
Run Code Online (Sandbox Code Playgroud)


Ted*_*opp 5

如果您想在注销时禁用您的应用程序,您可以弹出一个不可取消的对话框。


小智 5

只是使用这段代码:如果你想要反向禁用,你就不要使用super.OnBackPressed();

@Override
public void onBackPressed() {

}
Run Code Online (Sandbox Code Playgroud)


小智 5

在android中禁用后退按钮

@Override
public void onBackPressed() {
    return;
}
Run Code Online (Sandbox Code Playgroud)