Jak ustawić Fragment
'Id
, aby móc korzystać z getSupportFragmentManager().findFragmentById(R.id.--)
?Android - Ustaw identyfikator fragmentu
Odpowiedz
Nie można ustawić programistycznie identyfikatora fragmentu.
Istnieje jednak String tag
, który można ustawić wewnątrz FragmentTransaction, który może być użyty do jednoznacznej identyfikacji Fragmentu.
Jak zauważył Aleksey, można przekazać identyfikator FragmentTransaction
za pomocą metody add(int, Fragment)
. Jednak nie określa to ID fragmentu. Określa identyfikator ViewGroup
w celu wstawienia Fragment
do. Nie jest to użyteczne w oczekiwanym przez ciebie celu, ponieważ nie jednoznacznie identyfikuje s. Fragment
. Te identyfikatory są pojemnikami, że jeden fragment lub więcej może być dynamicznie dodawany. Zastosowanie takiej metody do identyfikacji Fragment
s wymagałoby dynamicznego dodawania ViewGroup
do układu dla każdego wstawianego Fragment
. To byłoby dość kłopotliwe.
Więc jeśli pytanie brzmi: jak stworzyć niepowtarzalny identyfikator Fragment jesteś dodając dynamicznie, odpowiedź jest użycie FragmentTransaction
„s add(int containerViewId, Fragment fragment, String tag) metoda i FragmentManager
” findFragmentByTag(String) metoda s.
W jednej z moich aplikacji musiałem dynamicznie generować ciągi. Ale i tak nie jest tak droga w stosunku do faktycznej FragmentTransaction.
Kolejną zaletą metody znaczników jest możliwość zidentyfikowania fragmentu, który nie jest dodawany do interfejsu użytkownika. Zobacz metodę FragmentTransaction: add(Fragment, String). Fragment
s nie musi mieć View
s! Mogą być również używane do utrzymywania efemerycznego stanu między zmianami konfiguracji!
W większości przypadków można użyć znacznika fragmentu oraz identyfikatora.
Możesz ustawić wartość zmiennej w FragmentTransaction.add(Fragment fragment, String tag);
. Następnie można użyć polecenia FragmentManager.findFragmentByTag(String tab)
, aby znaleźć żądany fragment.
Jak już wspomnieli Tom i inni, istnieją sposoby na umieszczenie znacznika na fragmencie i użycie tego znacznika do identyfikacji. Kolejnym problemem, z którym spotkałem się z tymi rozwiązaniami, jest to, że fragment nie otrzymuje tagu, dopóki nie zostanie powiązany z Aktywnością (lub, faktycznie, z FragmentManager
). Co zrobić, jeśli trzeba zidentyfikować fragment, zanim zostanie on oznaczony?
Moje dotychczasowe rozwiązania opierają się na najstarszej sztuczce (Java) na świecie: stwórz minimalistyczny fragment szablonu, który przyjmuje id w jednym z jego konstruktorów i zapewnia metodę getFragmentId()
, która zwraca ten identyfikator. Pozwoliłem, aby fragmenty wymagające wczesnej identyfikacji rozszerzyły ten szablon; voila! Problem rozwiązany.
To rozwiązanie może niestety wymagają zestawu fragmentów matrycy, po jednej dla każdego typu fragmentów, ListFragment
, DialogFragment
lub zwykły stary Fragment
(POFo ?!), które wymagają wczesną identyfikację. Ale jest to wykonalne w przypadku fragmentów, które myślę, biorąc pod uwagę uzyskane korzyści.
Przepraszamy za darcie gojenie ran :-)
Cheers!
Okazało się, że nie musisz znać identyfikatora fragmentu.
Od docs:
public abstract Fragment findFragmentById (int id)
Finds a fragment that was identified by the given id either
when inflated from XML or as the container ID when added in
a transaction.
Ważną częścią jest „jako identyfikator pojemnika po dodaniu w transakcji”.
tak:
getSupportFragmentManager()
.beginTransaction()
.add(R.id.fragment_holder, new AwesomeFragment())
.commit();
a następnie
AwesomeFragment awesome = (AwesomeFragment)
getSupportFragmentManager()
.findFragmentById(R.id.fragment_holder);
będzie Ci cokolwiek (niesamowite) fragment odbywa się w R.id.fragment_holder.
Oprócz odpowiedzi Toma, metoda replace również obsługuje tag fragmentu, oprócz metody dodawania.
użyć następujących:
Aby dodać fragment:
getFragmentManager().beginTransaction().add(R.id.fragment_container, fragmentToBeAdded, tag).commit();
identyfikacji istniejących fragment:
getFragmentManager().findFragmentByTag(fragmentName);
- 1. Ustaw argumenty fragmentu z działania
- 2. Ustaw identyfikator sklepu magento programowo
- 3. Ustaw identyfikator klienta w asp.net
- 4. Dodaj identyfikator fragmentu do przekierowania Zenda
- 5. Ustaw Tytuł inToolBar z fragmentu w Androidzie
- 6. Android - Obrót ekranu fragmentu
- 7. Android: Fragment rodzica zagnieżdżonego fragmentu
- 8. Android odświeżyć ViewPager wewnątrz fragmentu
- 9. Android: Aktywność wywołania z fragmentu
- 10. Android: Dodawanie fragmentu do działania
- 11. Android ListView w przykładzie fragmentu
- 12. Ustaw identyfikator przycisku dialogowego jQuery UI?
- 13. Ustaw nowy identyfikator za pomocą jQuery
- 14. Identyfikator UDID urządzenia Android lub unikalny identyfikator?
- 15. Ustaw kolor tła: Android
- 16. Android - ustaw "miganie" ImageView
- 17. Jak uzyskać identyfikator fragmentu adresu URL z HttpServletRequest
- 18. Identyfikator hiperłącza i fragmentu Problem z przesunięciem pionowym
- 19. Czy identyfikator fragmentu adresu URL jest wysyłany na serwer?
- 20. android machnięcia nie wykryto wewnątrz fragmentu
- 21. Google Android Mapy - błąd pompowania fragmentu klasy
- 22. Android zmianę koloru tła dla uprzywilejowania fragmentu
- 23. Android: Viewpager wewnątrz fragmentu szuflady nawigacji
- 24. Android i RoboGuice - Inject widoki fragmentu?
- 25. Android: Callback AsyncTask do fragmentu (nieaktywny)
- 26. Google Map v2 wewnątrz android fragmentu
- 27. Sprawdzanie istnienia fragmentu przy użyciu Robotium - Android
- 28. Android używający intencji otwarcia fragmentu z działania
- 29. Dlaczego powinienem używać fragmentu w systemie Android?
- 30. FCM Android - identyfikator pustej wiadomości
Gdybym użyć tagu, a nie ID dla fragmentu, w jaki sposób Używam zastępowania wywołania, które wymaga identyfikatora zasobu fragmentu? – Namratha
@Namratha, nie możesz. –
@TomDignan co powiesz na fragment, który zostanie dodany w ViewPager? Jak mogę ustawić jego tag? Nie mogę korzystać z transakcji w tej sytuacji. – GuilhE