2014-11-18 20 views
6

W mojej aplikacji mam jedną główną aktywność i kilka fragmentów. gdy użytkownik kliknie przycisk wstecz, fragmenty wyskakują jeden po drugim. Chcę zidentyfikować fragment znajdujący się obecnie w tylnym stosie. Więc użyj, aby zidentyfikować fragmenty według nazwy znacznika fragmentu. Użyłem następującego fragmentu kodu, aby uzyskać nazwę znacznika fragmentu, ale zawsze zwraca on wartość null.findFragmentByTag() zawsze zwraca wartość null - Android

FragmentManager fm = MainActivity.this.getSupportFragmentManager(); 
String fragmentTag = fm.getBackStackEntryAt(fm.getBackStackEntryCount() - 1).getName(); 

proszę o pomoc.

Edycja

zastępując fragment z tagiem,

FragmentManager fm = MainActivity.this.getSupportFragmentManager(); 
FragmentTransaction ft = fm.beginTransaction(); 
ft.replace(R.id.activity_main_content_fragment, fragment, text); 
+3

masz ustawione w TAG Fragment? –

+0

zobacz moje edytowane pytanie – user3800832

+0

btw gdzie jest wiersz 'findFragmentByTag()' ?? –

Odpowiedz

9

znalazłem mój błąd, to zapomniałem dodać tag do kopii stos.

FragmentManager fm = mainActivity.getSupportFragmentManager(); 
FragmentTransaction ft = fm.beginTransaction(); 
ft.replace(R.id.activity_main_content_fragment, fragment, text); 
ft.addToBackStack(text); 

A potem mogę dostać bieżącego fragmentu nazwy znacznika następująco,

FragmentManager fm = MainActivity.this.getSupportFragmentManager(); 
String currentFragmentTag = fm.getBackStackEntryAt(fm.getBackStackEntryCount() - 1).getName(); 
+5

Nie powinieneś dzwonić 'addToBackStack()', aby wywołanie zadziałało. Co jeśli chcesz, aby menedżer fragmentów zarządzał _manage_ twoimi fragmentami, ale nie miał go zastępować historycznie po powrocie. To nie powinna być poprawna odpowiedź. – AeroEchelon

+0

addToBackStack nie jest przeznaczony do tego celu ... Znacznik i addToBackStack to różne rzeczy. –

13

Trzeba wspomnieć TAG podczas dodawania/zastępowania go:

ft.replace(R.id.container, newFragment,"fragment_tag_String"); 

LUB

ft.add(R.id.container, newFragment,"fragment_tag_String"); 

Add fragment w BackSta ck jak:

ft.addToBackStack("fragment_tag_String"); 

Następnie można używać go z

getSupportFragmentManager().findFragmentByTag("fragment_tag_String"); 

Patrz:

Edit:

połączeń getSupportFragmentManager().executePendingTransactions() po wykonaniu transakcji

FragmentManager fm = MainActivity.this.getSupportFragmentManager(); 
FragmentTransaction ft = fm.beginTransaction(); 
ft.replace(R.id.activity_main_content_fragment, fragment, text); 
ft.commit(); 
fm.executePendingTransactions(); 

nadzieję, że to pomoże Ci ツ

+2

Użyłem pierwszej metody zastępowania fragmentów. ale zawsze zwraca wartość pustą. – user3800832

+0

podobnie jak to, FragmentManager fm = mainActivity.getSupportFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); \t \t ft.replace (R.id.activity_main_content_fragment, fragment, tekst); – user3800832

+0

jaka jest wartość w zmiennej tekstowej? upewnij się, że nie jest "" –

Powiązane problemy