Самый простой способ реализовать эту функцию - определить свой ViewPager как stati c в своей деятельности (чтобы вы могли получить к нему доступ из любого места в вашем приложении, включая фрагменты). Вы можете сделать его опубликованным c, или вы можете сделать его приватным и создать для него геттер.
private static ViewPager mViewPager; // This is the global variable
public static ViewPager getViewPager() { return mViewpager; } // This is the getter
Теперь предположим, что у нас есть действие MainActivity, которое содержит ViewPager. Каждый фрагмент внутри этого ViewPager содержит кнопку, которая должна управлять страницей (не обязательно должна быть в ViewPager, может находиться где угодно, если она имеет ссылку на вашу активность и эта активность все еще выполняется, поэтому не запускайте другую). one).
ViewPager содержит метод
setCurrentItem(int item, boolean smoothScroll)
(smoothScroll не обязателен и предназначен только для анимации)
Теперь вы можете сделать:
MainActivity.getViewPager().setCurrentItem(itemNr);
Или, если вам нужна необычная анимация прокрутки:
MainActivity.getViewPager().setCurrentItem(itemNr, true);
Теперь ваш второй вопрос / проблема заключалась в том, что вы упомянули, что не хотите, чтобы фрагменты воссоздались. В этом случае я думаю, что лучше использовать FragmentPagerAdapter, который поддерживает ваши фрагменты. Вы можете вызвать следующий метод, чтобы установить ограничение для этих страниц:
mViewPager.setOffscreenPageLimit(LauncherViewPageAdapter.NUMBER_OF_PAGES); //NUMBER_OF_PAGES was just a static constant in my LauncherViewPageAdapter class which extended ViewPageAdapter.
Примечание. По умолчанию это ограничение равно 3, но вам действительно не нужно беспокоиться о производительности. Я реализовал 4 страницы / фрагменты (виджеты, плитки, список приложений, настройки приложения) без проблем с памятью (даже на старых устройствах). Только не кладите их полностью с растровыми изображениями / интенсивным использованием памяти.
В настоящее время я работаю над приложением запуска, которое также использует ViewPager, поэтому не стесняйтесь отвечать на вопрос о ViewPager, так как я решил основные проблемы c, которые у меня были.