У меня есть NavigationView, где у меня есть вкладки, такие как "Home","Profile","Service"
и т. Д. Когда я нажимаю один из них, я хочу изменить TabLayout и Input моего ViewPager (видимые фрагменты). Я изменяю TabLayout, в прослушивателе onNavigationItemSelected
, с методом tabLayout.setupWithViewPager(tabViewPager);
, который отлично работает для моих TabTitles.Невозможно обновить фрагменты в Viewpager
И изменение для моего Viewpager Я пробую это: tabViewPager.setAdapter(viewPagerAdapter1);
и, например, в другой навигации нажмите tabViewPager.setAdapter(viewPagerAdapter2);
.
Мой ViewPager класс выглядит следующим образом:
public class TabViewPagerAdapter extends FragmentPagerAdapter {
private List<Fragment> mFragmentList = new ArrayList<>();
private List<String> mFragmentTitleList = new ArrayList<>();
Resources resources;
public TabViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFrag(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}}
Так Im инициализации. мой адаптер, как это в начале:
viewPagerAdapter1 = new TabViewPagerAdapter(getSupportFragmentManager());
viewPagerAdapter1.addFrag(new Home1Fragment(),"abc");
viewPagerAdapter1.addFrag(new Home2Fragment(),"def");
Но ничего не изменится ViewPager все то же только мои Названия моих Вкладок меняются. Как я могу это решить?
Моя проблема в том, что setAdapter() работает только в самом начале. После того, как я второй раз вызываю этот метод с другим адаптером, мой просмотрщик не обновляет фрагменты и сохраняет старый контент. –
Не можете ли вы добиться такого же поведения с помощью одного адаптера? Попробуйте добавить к адаптеру метод «removeFragment» или «removeAllFragments» и просто сбросьте его перед добавлением новых фрагментов. Не забывайте вызывать 'notifyDataSetChanged' каждый раз, когда вы меняете базовый набор данных. – fraggjkee
Я пробовал это сейчас, но он не работает ... Я добавил метод clearFragList(), который вызывает .clear() в моих списках, и после этого вызова я добавил новые фрагменты и вызвал notifyDataSetChanged(). Не работает: (другие идеи? –