我正在編寫一個使用FrameLayout
和Fragments
作爲其組件的Android應用程序。Android後退按鈕從背後帶來了錯誤的片段
我有3個片段:CommunityFragment
,TaskFormFragment
,TaskFragment
。
在CommunityFragment中,用戶按下按鈕以創建任務。然後TaskFromFragment替換FrameLayout中的CommunityFragment 與addToBackStack
。因爲在那之後,我想用後退按鈕返回到CommunityFragment。
在TaskFormFragment中,用戶按下create按鈕創建任務。然後TaskFragment打開而不是addToBackStack
,因爲我不想在按下後退按鈕時顯示TaskFormFragment。
所有這些工作都很完美。當我按下TaskFragment中的按鈕時,顯示CommunityFragment。但是,在那之後,如果我打開TaskFormFragment並按回按鈕,則不會顯示CommunityFragment!相反,它會打開TaskFragment。
這是怎麼發生的?這裏是我的片段過渡代碼:
從CommunityFragment到TaskFormFragment:
TaskFormFragment newFragment = new TaskFormFragment();
Bundle args = new Bundle();
args.putLong("taskTypeId", taskTypeId);
args.putLong("communityId", community.getId());
newFragment.setArguments(args);
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.frame_container, newFragment);
transaction.addToBackStack(null);
transaction.commit();
從TaskFormFragment到TaskFragment:
TaskFragment newFragment = new TaskFragment();
Bundle args = new Bundle();
args.putLong("taskId", task.getId());
newFragment.setArguments(args);
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.frame_container, newFragment);
transaction.commit();
編輯:我找到了soluti在此條目中:Problems with Android Fragment back stack
但我沒加TaskFragment到堆棧中?所以我甚至沒有給它命名。我怎樣才能清除它? – sedran
檢查更新的答案 –
問題在於TaskFragment替換爲CommunityFragment。我沒有添加TaskFragment到後臺堆棧。它從TaskFormFragment返回到TaskFragment,它從Backstack中移除CommunityFragment。我無法回到它。 – sedran