Intereting Posts
Получение списка всех Windows на Android Android: установить стиль представления программно Показать мягкую клавиатуру, даже если подключена аппаратная клавиатура Как разбирать массив JSON без какого-либо объекта в «Дооснащении»? Android SQLite Exception: невозможно закрыть из-за нефинализированных операторов Как получить нажатую строку из списка с помощью OnItemClick? Как изменить идентификатор группы файла на корневом устройстве Android? ViewPager + FragmentPagerAdapter внутри DialogFragment получает «IllegalArgumentException: просмотр не найден …» Установка значений по умолчанию для нескольких экземпляров / файлов SharedPreferences Карты Android: achartengine или AndroidPlot? IInAppBillingService.aidl не может генерировать Java-файл в Android Studio Почему моя андроидная активность всегда начинается прокруткой вниз? Как начать намерение, если контекст не является контекстом активности, а контекстом приложения Тестирование на Android, как имитировать мультитач (увеличение / уменьшение) с помощью инструментов? Значения EditText в диапазоне

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, фрагмент показан