Обновление фрагмента ViewPager при смахивании
У меня есть проблема, с которой я боролся в течение прошлых 2 дней.
Я создаю приложение, которое использует ActionBar, ViewPager & FragmentPagerAdapter. Код для Activity, Fragments & FragmentPagerAdapter в точности соответствует коду, указанному в примере для Android наhttp://developer.android.com/reference/android/support/v4/view/ViewPager.html
Проблема, с которой я сталкиваюсь, - это предположить, что у меня есть только 2 фрагмента в viewPager. при переключении между двумя фрагментами фрагменты не обновляются. onResume не вызывается, потому что viewPager кэширует минимум 1 фрагмент по обе стороны от отображаемого фрагмента.
Я попытался использовать onTabSelected, чтобы определить, когда выбран фрагмент, а затем запустить метод из этого фрагмента с помощью интерфейса (код ниже).
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();
}
Тем не менее, когда используется метод Start, NullPointerException вызывается при попытке обновить текстовое представление. Код метода запуска:
public void Start() {
TextView tv = _view.findViewById(R.id.text);
tv.setText("test");
}
Исключение выдается в строке:
TextView tv = _view.findViewById(R.id.text);
Интерфейс IStartStop довольно прост:
public interface IStartStop {
public void Start();
public void Stop();
}
Я не хочу использовать notifyDataSetChanged (); с POSITION_NONE, потому что каждый раз, когда я пролистываю новый фрагмент, загрузка фрагментов занимает несколько секунд
В настоящее время фрагменты содержат только текстовое представление, в будущем у них будет анимация, поэтому важно:
1- Запускайте анимацию только тогда, когда выбран фрагмент, а не когда выбран фрагмент рядом с ним (способ, которым ViewPager кэширует и возобновляет фрагменты).
2. Остановите анимацию, когда фрагмент больше не выбран, чтобы не тратить ресурсы устройства.
Да, я уже проверил все доступное в интернете, но, похоже, ничего не работает со мной.
Спасибо большое за помощь!