Я создал пример приложения для проверки этой проблемы с перекрытием.
У меня есть тип фрагмента, Fragment1, и я создаю новый экземпляр Fragment1 и добавляю его в FrameLayout в своей деятельности во время выполнения.Я добавляю фрагмент с помощью нескольких кнопок.
Примечание. Каждому новому экземпляру Fragment1 я присваиваю свой номер (# 1, # 2, # 3 и т. Д.) Для отображения в пользовательском интерфейсе.помогите мне выяснить, какой фрагмент я просматриваю.
Итак ... вот что я делаю:
- Нажмите на кнопку 3, создайте новый экземпляр Fragment1 и добавьте его в Frame1.
- Нажмите кнопку 4, создайте новый экземпляр Fragment1, добавьте его в Frame1 и добавьте его в backstack фрагмента.
- Повторите 1 и 2.
- Повторите 1 и 2.
Теперь у меня есть фрагменты в следующем порядке: 1 (# 1), 2 (# 2), 1 (# 3), 2 (# 4), 1 (# 5), 2(# 6).
Я нажимаю клавишу «Назад» при просмотре фрагмента № 6.
- Нажатие клавиши «Назад», отображается пользовательский интерфейс (# 5).
- Кнопка «Назад»нажмите, пользовательский интерфейс отображает (# 3 и # 5),
- нажатие клавиши «Назад», пользовательский интерфейс отображает (# 1, # 3 и # 5)
Кажется, фрагменты отображаютсяНа вершине друг друга.
ПОЧЕМУ?Есть ли пересекающаяся проблема?Как я могу устранить эту проблему?Я думал, что это будет проблема с библиотекой совместимости ... но это также на 3.0.
Код для добавления фрагментов:
public int doFragmentChange(int cont1, Fragment frag1, String tag1, int cont2, Fragment frag2, String tag2,
boolean addToStack, String stackTag) {
FragmentManager fm = getFragmentManager();// getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
if (frag1 != null) {
ft.replace(cont1, frag1, tag1);
}
if (frag2 != null) {
ft.replace(cont2, frag2, tag2);
}
// add fragment to stack
if (addToStack)
ft.addToBackStack(stackTag);
return ft.commit();
}