2011-05-06 72 views
13

我知道如何取消背部按鍵,使活動/主窗口保持可見:onBackPressed隱藏不破壞活動

public void onBackPressed() { 
    return;    
} 

我的目標是隱藏活動,但是,如果沒有完成它,怎麼辦你在onBackPressed事件中這樣做?

即我想得到儘可能onPause(),但不喚起onBackPressed()默認行爲,本質上調用finish()。另一種說法是,我想模仿onUserLeaveHint()?

任何幫助讚賞!

回答

44

如果你想模仿的具體活動的 「主頁」 按鈕,只是這樣做:

以下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

1

那麼,如果沒有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

4

如果不破壞你的活動中,你必須設置acitvity發射模式single_instance和使用moveTaskToBack(真)發送至後臺。

13

如果你想模仿的具體活動的 「主頁」 按鈕:

第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:從頂部