ViewPager с фрагментами – onPause (), onResume ()?

При использовании ViewPager с фрагментами наши методы onPause (), onResume () не вызывается при перемещении между вкладками. Есть ли способ, который мы можем найти во фрагменте, когда мы становимся видимыми или скрытыми?

К сожалению, у меня есть логика в onResume (), onPause (), например, регистрация с помощью служб определения местоположения, которые никогда не останавливаются при переключении вкладок, потому что onPause () никогда не вызывается до тех пор, пока не выйдет из всего приложения.

благодаря

Solutions Collecting From Web of "ViewPager с фрагментами – onPause (), onResume ()?"

ViewPager поставляется с интерфейсом OnPageChangeListener . Установив несколько флагов для предыдущих и текущих страниц, вы можете эмулировать это поведение.

Рассмотрение предыдущих решений не очень понятно, вот как я решил это благодаря Phix для его намека:

В обратном вызове OnPageChange ():

  Fragment old_fragment = getActiveFragment(old_position); Fragment new_fragment = getActiveFragment(new_position); old_f.setUserVisibleHint(false); old_f.onPause(); new_f.setUserVisibleHint(true); new_f.onResume(); 

Затем в onResume ():

  if (getUserVisibleHint()) /* resume code */ 

И в onPause ():

  if (!getUserVisibleHint()) /* pause code */ 

Вот код getActiveFragment, не обращая внимания на это:

  return fragmentManager.findFragmentByTag("android:switcher:" + viewPagerId + ":" + position); 

NB: Фрагмент имеет метод isVisible (), но он не кажется очень последовательным, поэтому использование UserVisibleHint.

EDIT: замените UserVisibleHint на частный флаг. Работала намного лучше!

Вы можете реализовать свою логику с помощью OnPageChangeLsitener ViewPager. Вот пример того, как вы можете реализовать onpagechangelistener viewpager:

  yourPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int i, float v, int i2) { } @Override public void onPageSelected(int i) { // When on page selected if position is not spesific for you // you can find your fragment or you can switch position. } @Override public void onPageScrollStateChanged(int i) { } }); 

Немного поздно для вечеринки, но в моем текущем приложении я установил OffScreenPageLimit в 1 для моего viewpager, это означает, что фрагменты не кэшируются, и каждый раз, когда представление меняет его, он перезагружает текущий фрагмент

https://developer.android.com/reference/android/support/v4/view/ViewPager.html#getOffscreenPageLimit ()

Чтобы дать немного больше определения методам в ответе savepopulation :

 yourPager.setOnPageChangeListener(new GridViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int row, int column, float rowOffset, float columnOffset, int rowOffsetPixels, int columnOffsetPixels) { } @Override public void onPageSelected(int row, int column) { // When on page selected if position is not specific for you // you can find your fragment or you can switch position. } @Override public void onPageScrollStateChanged(int state) { } }); 

Вы можете использовать метод ниже в фрагменте:

Public void setUserVisibleHint (boolean isVisibleToUser) {}

Когда isVisibleToUser == true, фрагмент показан