onBackPressed隐藏不破坏活动

问题描述:

我知道如何取消背部按键,使活动/主窗口保持可见:onBackPressed隐藏不破坏活动

public void onBackPressed() { 
    return;    
} 

我的目标是隐藏活动,但是,如果没有完成它,怎么办你在onBackPressed事件中这样做?

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

任何帮助赞赏!

如果你想模仿的具体活动的 “主页” 按钮,只是这样做:

以下API 5

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

上边以及API 5

@Override 
public void onBackPressed() { 
    moveTaskToBack(true); 
} 

它会将任务移到背景中..当您返回时,它将保持原样。

你可以看到关于这个位置的详细信息:Override back button to act like home button

+10

我结束了这个梦幻般的单线解决方案! 'public void onBackPressed(){ \t moveTaskToBack(true); \t return; }' – Cel 2011-05-06 17:09:30

+1

该方法在最新的API上可用,您当然也应该覆盖它。 :-) – neteinstein 2011-05-06 17:10:39

+0

嗨,这隐藏了我的整个应用程序,但我只想隐藏特定的活动不是一个完整的应用程序。 – 2015-07-22 11:16:37

那么,如果没有finish这个活动,你就不能回到当前的堆栈。也许你可以发现onBackPressed(),然后启动主意图在一个新的任务:

public void onBackPressed() { 
    Intent i = new Intent("android.intent.action.MAIN"); 
     i.addCategory("android.intent.category.HOME"); 
     i.addCategory("android.intent.category.DEFAULT"); 
     i.addCategory("android.intent.category.LAUNCHER"); 
     i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(i); 
    return;    
} 

让我知道是否可行。

+0

删除所有的活动我没有尝试这一个作为一个线NeTe的解决方案工作,但谢谢! – Cel 2011-05-06 17:13:37

+0

这是一个漂亮的方法:不知道它在那里。 – Femi 2011-05-06 17:18:25

如果不破坏你的活动中,你必须设置acitvity发射模式single_instance和使用moveTaskToBack(真)发送至后台。

如果你想模仿的具体活动的 “主页” 按钮:

第1种方法:

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

第2种方法:

@Override 
public void onBackPressed() { 
    moveTaskToBack(true); 
} 

如果你想在不破坏电流的情况下移至上一个活动:

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

现在从任何活动,如果你想打开后台的活动。我叫CurrentActivity。你可以把它称作任何形式......就像它将采取这种行动,并把它放在堆栈顶部。并在你离开的地方打开它。

Intent intent = new Intent(FromAnyActivity.this, CurrentActivity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
startActivity(intent); 

标志:

FLAG_ACTIVITY_REORDER_TO_FRONT:从堆栈

重新安排活动

FLAG_ACTIVITY_CLEAR_TOP:从顶部