onBackPressed隐藏不破坏活动

Cel*_*Cel 22 android

我知道如何取消后退按键,以便活动/主窗口保持可见:

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

我的目的是隐藏活动,但是,如果没有完成它,你如何在onBackPressed事件中做到这一点?

即我想获得onPause(),但不会唤起onBackPressed()默认行为,本质上调用finish().另一种说法是我想模仿onUserLeaveHint()?

任何帮助赞赏!

net*_*ein 54

如果您想模仿特定活动上的"主页"按钮,请执行以下操作:

API 5以下:

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

API 5以上和之上:

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

它将把任务移动到背景..当你返回时,它将是原样.

您可以在此处查看有关此内容的更多信息:覆盖后退按钮以充当主页按钮

  • 我最终得到了这个奇妙的工作单线解决方案!`public void onBackPressed(){moveTaskToBack(true); 返回; }` (11认同)

Xar*_*mer 18

如果您想模仿特定活动的"主页"按钮:

第一种方法:

@Override
public void onBackPressed() {
   Log.d("CDA", "onBackPressed Called");
   Intent setIntent = new Intent(Intent.ACTION_MAIN);
   setIntent.addCategory(Intent.CATEGORY_HOME);
   setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
   startActivity(setIntent);
}
Run Code Online (Sandbox Code Playgroud)

第二种方法:

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

如果您想在不破坏当前情况的情况下移至上一个活动:

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

现在,如果你想打开背景中的活动,可以从任何活动中获取.我将CurrentActivity命名为.你可以在任何地方调用它.比如......它会采取这种行为并把它放到堆栈顶部.并在你离开的地方打开它.

Intent intent = new Intent(FromAnyActivity.this, CurrentActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

标志:

FLAG_ACTIVITY_REORDER_TO_FRONT :从堆栈重新排序活动

FLAG_ACTIVITY_CLEAR_TOP :从顶部删除所有活动


小智 5

如果您没有销毁活动,则必须将活动启动模式设置为single_instance并使用moveTaskToBack(true)发送到后台.