У мене є дивна проблема. Я хочу відкрити новий фрагмент з поточного фрагмента. Тому я роблю це так:
Fragment fragment = new teamSettings();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.teamDetailAdmin, fragment);
// add to backstack, then back button will be work with fragments!
ft.addToBackStack(null);
// add animation
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.commit();
Проблема в тому, що в моєму новому фрагменті я бачу ті кнопки, які я натиснув у попередньому фрагменті.
Чи можна пояснити, чому це відбувається?
Відповіді:
1 для відповіді № 1Try this way,
Please take framelayout in your current activity
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
Fragment fragment = new teamSettings();
getFragmentManager().beginTransaction().replace(R.id.container, fragment,
fragment.getTag()).commit();
1 для відповіді № 2
Виклик FragmentTransition replace(R.id.container,fragment)
працює в значній мірі як дзвінок remove
до кожного фрагмента даного контейнера; add
до нового фрагмента. Якщо ваш попередній фрагмент не видаляється (кнопка все ще відображається), це означає, що ви додали цей фрагмент для контейнера, відмінного від R.id.teamDetailAdmin
. Щоб успішно замінити фрагмент, якщо вони знаходяться в різних контейнерах, необхідно видалити з нього поточний фрагмент і додати новий фрагмент до потрібного контейнера.