2010-04-27 149 views

回答

90

從要結束的活動調用finish()應該照顧這一點。

許多年後編輯:這仍然有效,但它是一種嚴厲的方法。當我最初發布時,Fragments不存在,並且(如幾位評論者所指出的),當涉及Fragments時,這不會以相同的方式工作。有更好的辦法,現在如果你使用的片段時使用Fragments.

+0

這就是分辯,那麼容易,對不起.... – david 2010-04-27 09:52:32

+7

沒有必要道歉,只是高興地幫助! – 2010-04-27 15:32:32

+17

這不會模擬後退按鈕。如果您只使用活動,則可以,但如果您在活動中使用片段,則會一起關閉所有片段。 – tasomaniac 2012-11-14 10:31:59

34

getFragmentManager().popBackStack(); 

getSupportFragmentManager().popBackStack(); 

如果您正在使用android.support.v4.app包

1

這是針對以下情況:相同的片段有時可能是活動中的唯一片段,並且有時是多片段活動的一部分,例如在兩個片段中碎片在同一時間可見。

/** 
* Method that can be used by a fragment that has been started by MainFragment to terminate 
* itself. There is some controversy as to whether a fragment should remove itself from the back 
* stack, or if that is a violation of the Android design specs for fragments. See here: 
* http://stackoverflow.com/questions/5901298/how-to-get-a-fragment-to-remove-itself-i-e-its-equivalent-of-finish 
*/ 
public static void fragmentImplementCancel(Fragment fragment) { 

    FragmentActivity fragmentActivity = fragment.getActivity(); 
    FragmentManager fragmentManager = fragmentActivity.getSupportFragmentManager(); 

    if (fragmentManager.getBackStackEntryCount() == 1) { 
     fragmentManager.popBackStack(); 
    } 
    else { 
     fragmentActivity.finish(); 
    } 
} 

例如,可以調用此代碼來實現取消按鈕。

if (theButton.getId() == R.id.btnStatusCancel) { 
     StaticMethods.fragmentImplementCancel(this); 
    } 
50

只是爲了記錄:所描述的方法並不盡相同後退按鈕在某些情況下,但你可以調用

this.onBackPressed(); 

getActivity().onBackPressed(); 

,如果你是在一個碎片實現相同的行爲exaclty。

+3

從我可以告訴,這是最好的答案。謝謝。 – 2017-01-11 02:20:25

0

您可以在後退按鈕按下欺騙了按鈕呼叫:

@Override 
public void onBackPressed() { 
    onNavigateUp(); 
}