Как можно заменить текущий фрагмент в 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);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Добрый день, я работаю из Spring Data JPA и возникла такая ситуацияДопустим в базе данных хранится информация про группу в университете(ид группы,...
Идет потеря кадров при отрисовке объектов с помощью Swing, хотел поинтересоваться как можно оптимизировать код или использовать более подходящие...