Mam fragment, który nadyma układ xml. Moim wymaganiem jest aktualizacja rozmiaru tekstu we wszystkich moich widokach wewnątrz mojego fragmentu, gdy moja aktywność zostanie wznowiona. Próbowałem wykonać jedną z następujących czynności:Odśwież lub wymuś przerysowanie fragmentu.
która nie działała. Próbowałem również
fragment.getView().requestLayout();
który również nie działa.
Na innej czynności mam ListFragment, który musi zrobić to samo. Próbowałem
listfragment.getListView().invalidate();
który wystarczyły, orzeźwiający mojego widoku listy i przerysowywania wszystkie elementy wewnątrz niego.
Nie rozumiem, dlaczego jeden działa, ale nie drugi.
widziałem też ludzi zalecających inicjowanie transakcji fragment i zastąpienie obecnego fragment z nowym, i to trzymało mnie zastanawiasz
Dlaczego należy utworzyć zupełnie nowy fragment i zastąpić mój obecny fragment, gdy wszystko, czego potrzebuję, to odświeżenie tekstu na widokach, które zawiera mój fragment.
Metoda transakcji fragmentu uniemożliwi mi zdefiniowanie mojego fragmentu w układzie xml mojej aktywności i będę musiał programowo wstawić fragment we właściwym miejscu.
Czy istnieje proste podejście do tego?
Aktualizacja znaną właściwością 'TextView' jak rozmiar tekstu nie jest to rodzaj rzeczy powinieneś wywołać 'invalidate()' for; struktura robi to dla ciebie, gdy właściwość się zmienia. Być może pokaż kod, w którym aktualizujesz właściwości tekstu; problem jest tam bardziej prawdopodobny. Jedyny przypadek, w którym powinieneś kiedykolwiek koniecznie ręcznie "unieważnić()" widok, to własność niestandardowa, o której Android nie wie. – Devunwired
Fragment odpowiada za ładowanie danych we wszystkich widokach, które zawiera, a podczas zapełniania tych danych sprawdza rozmiar tekstu ustawiony przez użytkownika w Preferencjach iw tym momencie ustawia ten rozmiar. Wierzę, że jeśli rozmiar zmieni się znacząco, widoki muszą się dostosować, aby zawinąć zawartość, a więc trzeba przerysować. I nawet jeśli jest to właściwość niestandardowa zamiast rozmiaru tekstu, jak zmusić widok fragmentu do przerysowania samego siebie? – ps2010
Ponownie, po ustawieniu wartości tekstu system widoku/układu wie, że musi ponownie zmierzyć i ponownie narysować. Wystarczy spojrzeć na 'setRawTextSize()' w źródłach TextView (linia 2406) ... co wywołuje się po aktualizacji właściwości? https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/widget/TextView.java Również, na bok, 'invalidate()' nie wymusza wyświetleń aby się dostosować, 'requestLayout()' robi to. – Devunwired