0
  • Я делаю приложение для Android с несколькими вкладками, скажем, что у есть 2 вкладки. Одна вкладка - «android.support.v4.app.Fragment», в которой содержит несколько текстовых полей и кнопку, а другая - «android.app.Fragment», которая одновременно является MapFragment.
  • Дело в том, что первый вызов вызывает другой «android.support.v4.app.Fragment» с картой (также поддерживается) и они могут перемещаться между ними с некоторой иерархией.
  • Теперь, если первая щелчок на карте кране, а затем на кнопку другой вкладки и я, наконец, нажмите на кнопку, чтобы перейти к кадру, который содержит cardviews, я могу видеть это их, но на заднем плане я вижу также MapFragment.
  • Я не знаю, как это решить. Я попытался использовать replace, remove, add, popBackStack, ... Кроме того, я попытался удалить из rootview фрейм фрагмента, но ничего не произошло.
  • Дело в том, что я собираюсь выбросить ваш ноутбук из окна.

Заранее благодарен!Андроид фрагмент остается фон

ответ

0

Ну, я узнал, что произошло. Это связано с работой с двумя разными менеджерами фрагментов (FragmentManager и SupportFragmentManager).
В зависимости от типа фрагмента (поддержки или обычного), который вы хотите удалить или заменить, вам необходимо использовать тот или иной менеджер фрагментов.
Я создал перечисление, чтобы узнать, какой фрагмент активен (чтобы удалить) и какой фрагмент начнется (для замены).
Более или менее я сделал такую ​​функцию:

private void manageFragment (FragmentEnum nextFragment) { 

     switch (activedFragment) { 
      case SUPPORT: 
       getSupportFragmentManager().beginTransaction().remove(fragmentSupport).commit(); 
       break; 
      case NORMAL: 
       getFragmentManager().beginTransaction().remove(fragmentNormal).commit(); 
       break; 
     } 

     activedFragment = nextFragment; 

     switch (nextFragment) { 
      case SUPPORT: 
       getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragmentSupport).commit(); 
       break; 
      case NORMAL: 
       getFragmentManager().beginTransaction().replace(R.id.fragment_container, fragmentNormal).commit(); 
       break; 
     } 
    } 
0

Если вы используете .addToBackStack(""), удалите это. и для вызова фрагмента каждый раз, когда пользователь .replace(); метод для всего вашего фрагмента.

+0

У меня 3 фрагментов, как я сказал. Две вкладки (не содержат '.addToBackStack (" ")', 1-support, 2- normal) и еще один фрагмент, который вызывается из вкладки 1 (вот почему это имеет .addToBackStack ("") ') , – Erqox