Как можно заменить текущий фрагмент в ViewPager? Например, нужно заменить класс фрагмента, причем из другого класса, как можно это реализовать?
Если правильно понял ваш вопрос, это довольно легко:
Допустим, у вас есть MyViewPagerAdapter, адаптер вашего ViewPager, у которого есть функции addFragment() и removeFragment(), и который расширяет класс FragmentStatePagerAdapter т.к. вы работаете с фрагментами (override-функции я опускаю, пример такого адаптера можете глянуть здесь):
public class MyViewPagerAdapter extends FragmentStatePagerAdapter {
Context context;
private ViewPager viewPager;
//пример с TabLayout, но можно и без него, конечно
private TabLayout tabLayout;
private final ArrayList<Fragment> fragmentList = new ArrayList<>();
public MyViewPagerAdapter(FragmentManager manager, Context context, ViewPager viewPager,
TabLayout tabLayout) {
super(manager);
this.context = context;
this.viewPager = viewPager;
this.tabLayout = tabLayout;
}
...
public void addFragment(Fragment fragment) {
/*
* добавляем фрагмент в список
* нужно для override-функций
* getItem() и getCount()
*/
fragmentList.add(fragment);
//не забываем обновить состояние ViewPager'a
notifyDataSetChanged();
}
public void removeFragment(int position) {
//удаляем tab по позиции
removeTab(position);
//удаляем сам фрагмент из списка и...
Fragment fragment = fragmentList.get(position);
fragmentList.remove(fragment);
//удаляем экземпляр фрагмента
destroyItem(viewPager, position, fragment);
//не забываем обновить состояние ViewPager'a
notifyDataSetChanged();
}
private void removeTab(int position) {
if (tabLayout.getChildCount() > 0) {
tabLayout.removeTabAt(position);
}
}
}
destroyItem() - метод из FragmentStatePagerAdapter, который удаляет экземпляр фрагмента.
Теперь просто. В любом классе каким-либо образом получаем позицию текущего фрагмента в ViewPage, который хотим заменить. Например как-то так:
int currentTabPosition = viewPager.getCurrentItem();
Получаем адаптер ViewPage и вызываем:
adapter.removeFragment(currentTabPosition);
Получаем новый фрагмент:
MyFragment myFragment = new myFragment();
и добавляем его в адаптер:
adapter.addFragment(myFragment);
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости