我有一個FrameLayout活動,需要根據用戶輸入顯示不同的片段。片段切換視圖被重用?
我使用呈現出碎片的代碼是這樣的:
private void showFragment(Fragment fragment, Bundle args, boolean addToBackStack) {
if (args != null) {
fragment.setArguments(args);
}
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.setCustomAnimations(R.anim.activity_open_translate, R.anim.activity_close_scale);
fragmentTransaction.replace(R.id.main_frame, fragment);
if (addToBackStack) {
fragmentTransaction.addToBackStack(fragment.getClass().getName());
}
fragmentTransaction.commit();
}
。這被稱作:
if (contactPickFragment == null) {
contactPickFragment = new ContactPickFragment();
}
showFragment(contactPickFragment, args, true);
這一切工作正常。現在,如果用戶進入一個片段後按下並返回到同一片段,則我所有的視圖都保持不變。例如,我在片段內部有一個EditText,用戶在裏面編輯內容。如果用戶回到片段,相同的文本仍然存在。我不希望發生這種情況。如何重置視圖中的所有內容?
我已經在Fragment的onCreateView()中添加了代碼來清除文本,並且從調試中我看到這是被調用的,但文本永遠不會被清除。我在這裏做錯了什麼?
好的,這是一個很好的解釋。但是我擔心,如果我使用新的實例,舊的實例是否仍然會附加到該活動?如果來回太多,這不是一個記憶問題嗎?或者你建議我手動刪除片段而不是替換? – Anoop
@Anoop如果用戶按下'後退',Android將撤消你的Fragment事務 - 它將刪除在該事務中添加的任何Fragment,並將添加在該事務中刪除的任何Fragment。按下後,舊實例不應附加到活動。 – antonyt