2013-05-14 6 views
7

Jeśli to nie pomaga, co chcę jest podobny do tego, co zrobić w tej google tutorialtransakcja fragmentów w Android wyników w pustym ekranie

Ale jakiś fragment jest tworzony przed przejściem. Jeśli to zrobię, przejście działa dobrze; ale nie mogę użyć tego podejścia

=====

Dążąc do API 7+ jestem po prostu staramy się mieć jeden fragment widoczny na całym ekranie i za pomocą przycisku (narysowany przycisk, ze związkiem zdarzenie onTouch), a następnie naprzemiennie z drugim fragmentem i odwrotnie.

Ale albo otrzymuję pusty ekran, gdy zastępuję pierwszy fragment drugim, lub gdy używam fragmenttu fragmenty fragmentu: fragment.transakcję.show i fragment.transakcję.hide; Mogę przełączać się dwa razy, zanim otrzymam pusty ekran. Nie chcę mieć na backstacku.

Tworzę fragmenty w główną działalność za onCreate:

DiceTable diceTable = new DiceTable(); 
Logger logger = new Logger(); 
fragmentTransaction.add(diceTable, DICETABLE_TAG); 
fragmentTransaction.add(logger, LOGGER_TAG); 
fragmentTransaction.add(R.id.fragment_container, logger); 
fragmentTransaction.add(R.id.fragment_container, diceTable); 

Wtedy na jednej metody (zwane z fragmentów) Robię przełącznik:

Logger logger = (Logger)fragmentManager.findFragmentByTag(LOGGER_TAG); 
    DiceTable diceTable = (DiceTable)fragmentManager.findFragmentByTag(DICETABLE_TAG); 

    if (diceTable.isVisible()) { 
     fragmentTransaction.replace(R.id.fragment_container, logger); 

     fragmentTransaction.commit(); 
     fragmentTransaction.hide(diceTable); 
     fragmentTransaction.show(logger); 
    } 
    else if (logger.isVisible()) { 
     fragmentTransaction.replace(R.id.fragment_container, diceTable); 

     fragmentTransaction.commit(); 
     fragmentTransaction.hide(logger); 
     fragmentTransaction.show(diceTable); 
    } 

Nie jest to w jaki sposób należy to zrobić ?

pusty ekran podczas wymiany fragmentów

Odpowiedz

6

Spróbuj zainicjować fragmenty w ten sposób:

private void initFragments() { 
    mDiceTable = new DiceTable(); 
    mLogger = new Logger(); 
    isDiceTableVisible = true; 

    FragmentManager fm = getSupportFragmentManager(); 
    FragmentTransaction ft = fm.beginTransaction(); 
    ft.add(R.id.fragment_container, mDiceTable); 
    ft.add(R.id.fragment_container, mLogger); 
    ft.hide(mLogger); 
    ft.commit(); 
} 

A potem przerzucić między nimi w ten sposób:

private void flipFragments() { 
     FragmentManager fm = getSupportFragmentManager(); 
     FragmentTransaction ft = fm.beginTransaction(); 
     if (isDiceTableVisible) { 
      ft.hide(mDiceTable); 
      ft.show(mLogger); 
     } else { 
      ft.hide(mLogger); 
      ft.show(mDiceTable); 
     } 
     ft.commit(); 
     isDiceTableVisible = !isDiceTableVisible; 
    } 
1

można łączą dwa różne sposoby zmiany którego fragment jest pokazany:

  • Numer replace() zastąpić zawartość pojemnika inny fragment
  • Wywołanie hide() aby usunąć Fragment, a następnie wywołanie show(), aby pokazać kolejny Fragment.

Wybierz jedną metodę i trzymaj się jej. Przewodnik budowania elastycznego interfejsu użytkownika korzysta tylko z metody replace(), więc zacznę od próby usunięcia wszystkich połączeń z numerami show() i hide().

Zobacz także pod numerem Android Fragments: When to use hide/show or add/remove/replace?, gdzie znajduje się krótkie podsumowanie, kiedy może być użyteczne używanie hide/Show zamiast zamiany.

Powiązane problemy