Fragment aktualizacji ViewPager po przeciągnięciu
Mam problem, z którym borykałem się przez ostatnie 2 dni.
Buduję aplikację, która używa ActionBar, ViewPager i FragmentPagerAdapter. Kod działania, fragmentów i FragmentPagerAdapter jest dokładnie taki sam, jak kod podany w przykładzie na Androidahttp://developer.android.com/reference/android/support/v4/view/ViewPager.html
Problem, z którym się borykam - zakładając, że mam tylko 2 fragmenty w viewPager. podczas przełączania / przesuwania między nimi fragmenty nie są aktualizowane. onResume nie jest wywoływane, ponieważ viewPager buforuje minimum 1 fragment po obu stronach wyświetlanego fragmentu.
Próbowałem użyć onTabSelected do wykrycia, kiedy fragment został wybrany, a następnie uruchomić metodę z tego fragmentu za pomocą interfejsu (kod poniżej).
public void onTabSelected(Tab tab, FragmentTransaction ft) {
TabInfo tag = (TabInfo)tab.getTag();
for (int i=0; i<mTabs.size(); i++) {
if (mTabs.get(i) == tag) {
mViewPager.setCurrentItem(i);
}
}
((IStartStop)getItem(tab.getPosition())).Start();
}
Jednak gdy używana jest metoda Start, wyjątek NullPointerException jest uruchamiany podczas próby zaktualizowania widoku tekstowego. Kod metody początkowej to:
public void Start() {
TextView tv = _view.findViewById(R.id.text);
tv.setText("test");
}
Wyjątek jest zgłaszany w linii:
TextView tv = _view.findViewById(R.id.text);
Interfejs IStartStop jest dość prosty:
public interface IStartStop {
public void Start();
public void Stop();
}
Nie chcę używać notifyDataSetChanged (); z POSITION_NONE, ponieważ za każdym razem, gdy przeciągam do nowego fragmentu, ładowanie fragmentów zajmuje kilka sekund
W tej chwili fragmenty zawierają tylko widok tekstowy, w przyszłości będą miały animację, dlatego ważne jest, aby:
1- Uruchamiaj animację tylko po zaznaczeniu fragmentu, a nie po zaznaczeniu fragmentu znajdującego się obok (sposób, w jaki ViewPager buforuje i wznawia fragmenty).
2- Zatrzymaj animację, gdy fragment nie jest już wybrany, aby uniknąć marnowania zasobów urządzenia.
Tak, sprawdziłem już wszystko, co jest dostępne w Internecie, ale nic nie działa ze mną.
Bardzo ci dziękuje za pomoc!