2013-02-20 19 views
43

Mam działanie A, które wywołuje fragment Bf, który wywołuje fragment Cf. Chcę, aby Bf został umieszczony w backstack, gdy wywoływany jest Cf, aby użytkownicy mogli z powrotem do niego nawigować. Jeśli jednak w Cf zostanie naciśnięty konkretny przycisk, chciałbym usunąć Bf z backstacku. czy to możliwe?Jak oderwać fragment z backstack

Widzę, że istnieje funkcja popBackStack(). Jednak jestem trochę zdezorientowany, jak to zadziała. Czy korzystanie z tej funkcji jest bezpieczne? Czy istnieje możliwość, że działanie z innej aplikacji zostanie wstawione po Bf na backstacku?

Czy istnieje również sposób na zmianę zapisanego stanu instancji fragmentu na backstacku?

Po prostu nie mogę wymyślić, jak wykonać solidny test na backstacku za pomocą emulatora.

+0

Unikać używania powrotem stosy! to naprawdę nie pomaga w ogólnej wydajności! użyj plain replace() lub jeszcze lepiej usuń/dodaj za każdym razem, gdy chcesz nawigować! Sprawdź mój wpis na http://stackoverflow.com/questions/5802141/is-this-th-right-way-to-clean-up-fragment-back-stack-when-leaving-a-deeply-nest/26093368# 26093368 –

+0

@stack_ved nie jest dobrym pomysłem. BackStacks to wspaniała rzecz. Przy okazji nie widzę Twojego postu. Sądzę, że została ona przegłosowana. : P – Sufian

Odpowiedz

86

Możesz pop fragment po imieniu. Dodając fragmenty do tylnego stosu, po prostu nadaj im nazwę.

fragmentTransaction.addToBackStack("fragB"); 
fragmentTransaction.addToBackStack("fragC"); 

Następnie w Fragment_C, pop tylną stos używając nazwy tj .. fragB i obejmują POP_BACK_STACK_INCLUSIVE

someButtonInC.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 

     FragmentManager fm = getActivity() 
       .getSupportFragmentManager(); 
     fm.popBackStack ("fragB", FragmentManager.POP_BACK_STACK_INCLUSIVE); 
    } 
}); 
+9

Będzie działać, nawet jeśli nie przekażemy parametrów w metodzie fm.popBackStack. fm.popBackStack(); – Kailas

+0

co jeśli chcę zrobić to z powrotem naciśnij przycisk? – Akshay

+0

@Akki, jeśli używasz dodaj do backstacku, to już wyskoczy ostatni fragment dodany po uderzeniu w element nawigacji wstecz. Dlatego nie trzeba wykonywać żadnych dodatkowych czynności, aby wykonać normalną nawigację wstecz. Jedyny czas, który musisz zastąpić po naciśnięciu przycisku Wstecz, jest wtedy, gdy chcesz zrobić coś innego niż normalna nawigacja z krokiem wstecz. – ocross

Powiązane problemy