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

评论

您能否更清楚地知道这个问题?如果要覆盖后退按钮的默认行为,请在此处参考此问题。 stackoverflow.com/questions/2000102/…

除非您有充分的理由,否则请不要这样做,因为破坏预期的运营模式会严重损害整个平台

如果您必须处理一个笨拙的Samsung S4,该三星的S4后退按钮在手机边缘上是触敏的(不是物理的),它已经非常触敏,以至于手掌靠在侧面回去。

它违反了Android质量和设计指南UX-N1的角色。

#1 楼

重写onBackPressed方法,如果要处理设备上的后退按钮,则什么也不做。

@Override
public void onBackPressed() {
   if (shouldAllowBack()) {
       super.onBackPressed();
   } else {
       doSomething();
   }
}


评论


这比覆盖关键的处理方法更好,更干净,并且具有相同的效果。好答案!

– Nik Reiman
2011年5月13日在8:02

伟大的解决方案伙计。有什么办法可以使用主页按钮执行此操作?

– Datta Kunde
2011年6月8日7:01

这很棒!实际上,我想始终在退出任何其他活动时都回到我的主要活动,而重写此方法可以使我很轻松地做到这一点。

– Jim
13年4月3日在20:14

糟糕,我忘记删除了super.onBackPressed()。

–亚里斯·迈克尔(Aristo Michael)
2015年10月7日14:40

#2 楼

如果要寻找更高的api级别2.0和更高版本
,这将很好用

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


如果要寻找android api级别达到1.6以上。

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


在活动中编写以上代码,以防止按下后退按钮

评论


与onbackpressed的api级别要求相比,此方法比使用onbackpressed更向后兼容

– AndrewPK
2011年9月7日,下午3:40

好答案。尽管我的项目不需要它,但我感谢您提供了新旧方法。这应该标记为正确答案。 +1

– Jim
13年4月3日在20:16

@Javanator,第二个对我不起作用(例如,对于API级别16),但是第一个像个魅力

–noloman
13年7月9日在14:27

#3 楼

您可以通过这种简单的方式进行操作不要调用super.onBackPressed()

注意:-除非有充分的理由,否则请不要这样做。

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


评论


关于“为什么不”的解释会很好。谢谢。

–几乎是初学者
17年3月12日在9:24

不调用.super很重要!

–冉
17年3月17日在15:17

@almostabeginner,因为不调用super将使后退按钮的正常使用无效。当正常工作的按钮停止工作时,用户会感到恐惧。他们可能会认为该应用有故障或手机出现故障等。您的应用最终将是罪魁祸首。

– Bengongon97
19年7月17日在12:41

#4 楼

只需重写onBackPressed()方法即可。

@Override
public void onBackPressed() { }


#5 楼

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

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


#6 楼

如果您想确保在Activity被杀死之前从某个服务器注销了android客户端应用程序->在其自己的线程上退出服务(无论如何,这就是您应该做的事情)。

禁用后退按钮不会为您解决任何问题。例如,当用户接到电话时,您仍然会遇到相同的问题。接到电话后,您的活动在从网络上获得可靠答案之前被杀死的可能性几乎相同。

这就是为什么您应该让服务在其自己的线程上等待来自网络的答案,然后如果服务未成功,请使其重试。 android服务不仅在返回答案之前被杀死的可能性要小得多,而且如果真的在完成工作之前被杀死,它总是可以被AlarmManager恢复运行以再次尝试。

#7 楼

只需重写onBackPressed()方法即可,而无需调用onBackPressed方法的超类或其他方法。.

@Override
public void onBackPressed()
{

}


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

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


将需要的活动名称替换为myActivity。

如果使用片段,则首先调用callParentMethod()方法

public void callParentMethod(){
    context.onBackPressed(); // instead of context use getActivity or something related
}


然后调用空方法

@Override
public void onBackPressed()
{

}


#8 楼

如果您使用的是FragmentActivity。然后像这样

首先在您的Fragment内部调用它。 />
public void callParentMethod(){
    getActivity().onBackPressed();
}


#9 楼

只需使用以下代码:如果要禁用禁用,请不要使用super.OnBackPressed();

@Override
public void onBackPressed() {

}


#10 楼

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

@Override
public void onBackPressed() {
  //remove call to the super class
  //super.onBackPressed();
}


#11 楼

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

#12 楼

您只需要覆盖后退按钮的方法即可。您可以根据需要将方法保留为空,以便在按“后退”按钮时什么也不会发生。请看下面的代码:

@Override
public void onBackPressed() 
{
   // Your Code Here. Leave empty if you want nothing to happen on back press.
}


#13 楼

除了上述答案中的这两种方法之外。


onBackPressed()(API级别5,Android 2.0)

onKeyDown()(API级别1,Android 1.0 )


您还可以像这样覆盖dispatchKeyEvent()(API级别1,Android 1.0),


dispatchKeyEvent()(API级别1,Android 1.0) )


@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    // TODO Auto-generated method stub
    if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
        return true;
    }
    return super.dispatchKeyEvent(event);
}


#14 楼

在android中禁用后退按钮

@Override
public void onBackPressed() {
    return;
}


#15 楼

对我来说,仅覆盖onBackPressed()无效,但明确指出应该开始的活动有效:

@Override
public void onBackPressed(){
  Intent intent = new Intent(this, ActivityYouWanToGoBack.class);
  startActivity(intent);
}


#16 楼

试试这个:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
 if (keyCode == KeyEvent.KEYCODE_BACK) {

   return true;
 }
   return super.onKeyDown(keyCode, event);    
}


#17 楼

super.onBackPressed()移除public void onBackPressed()效果很好。
它已在android 9中进行了测试