У меня проблема, с которой я боролся последние 2 дня.
Я создаю приложение, которое использует ActionBar, ViewPager и FragmentPagerAdapter. Код для Activity, Fragments и FragmentPagerAdapter точно соответствует тем, которые указаны в примере андроида на 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();
}
Однако, когда используется метод "Пуск", при попытке обновить текстовое окно запускается исключение 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- Остановите анимацию, когда фрагмент больше не выбран, чтобы избежать потерь ресурсов устройства.
Да, я уже проверил все, что доступно в Интернете, но со мной ничего не работает.
Большое спасибо за вашу помощь!