W aplikacji na Androida ładuję dane z bazy danych do pliku TableView
wewnętrznego Fragment
. Ale kiedy przeładowuję Fragment
, wyświetla poprzednie dane. Czy mogę ponownie wypełnić Fragment
bieżące dane zamiast poprzednich danych?
android
android-fragments
Samantha Withanage
źródło
źródło
Odpowiedzi:
Myślę, że chcesz odświeżyć zawartość fragmentu po aktualizacji db
Jeśli tak, odłącz fragment i ponownie go przymocuj
Your_Fragment_TAG to nazwa, którą nadałeś fragmentowi podczas jego tworzenia
Ten kod jest przeznaczony dla biblioteki wsparcia.
Jeśli nie obsługujesz starszych urządzeń, po prostu użyj getFragmentManager zamiast getSupportFragmentManager
[EDYTOWAĆ]
Ta metoda wymaga, aby fragment miał tag.
Jeśli go nie masz, to metoda @ Hammera jest tym, czego potrzebujesz.
źródło
To odświeży aktualny fragment:
źródło
W przypadku, gdy nie masz tagu fragmentu, poniższy kod działa dobrze dla mnie.
źródło
getActivity()
w mojej aktywności. Powinienem użyćActivity.this...
?możesz odświeżyć swój fragment, gdy jest widoczny dla użytkownika, po prostu dodaj ten kod do swojego fragmentu, co spowoduje odświeżenie fragmentu, gdy będzie widoczny.
źródło
Aby odświeżyć fragment zaakceptowana odpowiedź nie będzie działać na wersji Nougat i nowszych. Aby to działało na wszystkich systemach operacyjnych, możesz wykonać następujące czynności.
źródło
Nie możesz ponownie załadować fragmentu, gdy jest on dołączony do działania, w którym otrzymujesz „
Fragment Already Added
wyjątek ”.Tak więc fragment należy najpierw oderwać od jego aktywności, a następnie dołączyć. Wszystko można zrobić za pomocą płynnego interfejsu API w jednej linii:
Aktualizacja: ma to na celu uwzględnienie zmian wprowadzonych w API 26 i nowszych:
Więcej informacji na temat aktualizacji można znaleźć na stronie https://stackoverflow.com/a/51327440/4514796
źródło
zadziała to tylko wtedy, gdy użyjesz
FragmentManager
do zainicjowania fragmentu. Jeśli masz go jako<fragment ... />
plik XML, nie wywoła tegoonCreateView
ponownie. Zmarnowałem 30 minut, żeby to rozgryźć.źródło
Tutaj to, co zrobiłem i zadziałało dla mnie, używam firebase i kiedy użytkownik jest zalogowany Chciałem najpierw odświeżyć bieżący fragment, będziesz musiał zażądać kontekstu z aktywności, ponieważ fragment nie ma sposobu na uzyskanie kontekstu, chyba że ustawisz go tutaj z Aktywności lub kontekstu to kod, którego użyłem i pracowałem w języku kotlin, myślę, że możesz użyć tego samego w klasie java
źródło
Użyj a
ContentProvider
i załaduj dane za pomocą „CursorLoader”. Dzięki tej architekturze Twoje dane będą automatycznie ładowane ponownie po zmianach w bazie danych. Użyj ram osób trzecich dla twojegoContentProvider
- tak naprawdę nie chcą wprowadzić go przez siebie ...źródło
Miałem ten sam problem, ale żaden z powyższych nie działał dla mojego. albo wystąpił problem z backstackiem (po załadowaniu, gdy użytkownik nacisnąłby to ponownie, mógł przejść do tego samego fragmentu) lub nie wywołał
onCreaetView
w końcu zrobiłem to:
dobra uwaga jest taka, że nie potrzebujesz tagu ani identyfikatora fragmentu. jeśli chcesz przeładować
źródło
Skorzystaj z metody onResume ... zarówno na aktywności fragmentu, jak i na aktywności trzymającej fragment.
źródło
GeneralInfo
to moja klasa FragmentGeneralInfo.java
Umieściłem to jako metodę w klasie fragmentu:
źródło
Na przykład z TabLayout: po prostu zaimplementuj OnTabSelectedListener. Aby ponownie załadować stronę, możesz użyć implementacji SwipeRefreshLayout.OnRefreshListener ie
public class YourFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener {
metoda onRefresh () będzie @Override z interfejsu, tj .:
Oto układ:
Koduj w swojej działalności
TabLayout tabLayout = (TabLayout) findViewById (R.id.tablayout); tabLayout.setupWithViewPager (viewPager);
źródło
Napisz viewpagerAdapter.notifyDataSetChanged (); w onResume () w MainActivity. Powodzenia :)
źródło
Najprostszy sposób
stwórz publiczną metodę statyczną zawierającą viewpager.setAdapter
uczynić adapter i przeglądarkę statyczną
zadzwoń wszędzie, każdą czynność, dowolny fragment.
źródło