我需要從FragmentA去FragmentB(我使用navigationdrawer)如何從片段A回到片段B?
我創建FragmentB這個方法:
public void onBackPressed(){
FragmentManager fm = getActivity().getFragmentManager();
fm.popBackStackImmediate();
}
,但他們沒有工作,我怎麼能實現這個方法?
我需要從FragmentA去FragmentB(我使用navigationdrawer)如何從片段A回到片段B?
我創建FragmentB這個方法:
public void onBackPressed(){
FragmentManager fm = getActivity().getFragmentManager();
fm.popBackStackImmediate();
}
,但他們沒有工作,我怎麼能實現這個方法?
當你把你的片段,你還必須將它添加到您的片段的堆棧中。
FragmentTransaction ft = getSupportFragmentManager.beginTransaction();
ft.replace(R.id.content, fragment, backStateName);
ft.addToBackStack(backStateName);
ft.commit();
(這裏R.id.content是在你的活動你的片段容器)
然後,你必須重寫onBackPressed方法在您的活動包含您的片段。
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() > 1) {
getSupportFragmentManager().popBackStack();
}
}
如果你想自定義您的onBackPressed那麼你可以檢查您在您的活動當前可見的片段,並針對特定的片段執行動作創建一個回調
。 。 例子 -
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() > 1) {
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.content);
if (fragment instanceof FragmentB) {
((FragmentB) fragment).onBackPressed();
// getSupportFragmentManager().popBackStack();
}
}
現在你可以添加getSupportFragmentManager()popBackStack();在你的Fragment的onBackPressed()方法中。
mmhh ..但是什麼是'backStateName'?我從來沒有宣佈backstate .. –
你可以把你的類名字作爲字符串backStateName = FragmentB.class.getName(); – Karan
這段代碼應該在Activity
之內,保存這兩個片段。
可以肯定,您添加(不更換)的片段回棧,通過調用:
android.app.FragmentTransaction#add(int, android.app.Fragment, java.lang.String)
android.app.FragmentTransaction#addToBackStack
android.app.FragmentTransaction#commit
或同等的支持庫
呵呵tnks現在我把我的'onBackPressed()'方法放在我的活動中,但現在當我點擊「後退按鈕」時,他什麼都不做。 –
你確定Backstack不是空的嗎?如果它是空的,你應該調用'super.onBackPressed()'。 –
對於要去一個片段到另一個我從Fragment調用Activity的方法,這樣Activity的方法就可以訪問那個持有片段的視圖,並且它可以輕鬆切換。
像這在我的片段
((MainActivity)getActivity())TransitionFromItemToCategory();
而在片段篩選
public void TransitionFromItemToCategory(){
FoodCategoryFragment FCM = new FoodCategoryFragment();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.fragment_container, FCM);
ft.commit();
}
**用片段A替換**片段B –
我該怎麼辦?你能告訴我一個例子嗎? –
請參考[官方文檔](https://developer.android.com/training/basics/fragments/fragment-ui.html) –