9

Я хочу реализовать мастер с помощью Библиотека поддержки дизайна материалов.Динамическое обновление TabLayout без изменения выбранной вкладки

Я использую ViewPager и Tablayout, но у меня возникла проблема с добавлением новых вкладок динамически.

Во-первых, я создал мои виджеты в onCreate метода:

viewPager = (ViewPager) findViewById(R.id.tab_viewpager); 
tabLayout = (TabLayout) findViewById(R.id.tab_layout); 

adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
adapter.addFrag(new DummyFragment(), "1"); 
adapter.addFrag(new DummyFragment(), "2"); 
viewPager.setAdapter(adapter); 
tabLayout.setupWithViewPager(viewPager); 

Затем я хочу добавить еще одну карту, когда элемент в списке щелкают:

adapter.addFrag(new DummyFragment(), "3"); 
adapter.notifyDataSetChanged(); 
tabLayout.setTabsFromPagerAdapter(adapter); 

Проблема заключается в том: после добавления выбранная карта сначала сбрасывалась.

Как предотвратить такое поведение?

ответ

0

Просто бежал в одной и той же проблемой, и, к счастью, нашли решение (не хорошенькая, но она работает):

, когда вам необходимо обновить вкладки:

pageradapter.notifyDataSetChanged(); 
for (int i = 0; i < viewpager.getCount(); i++) { 
    sectionsTabLayout.getTabAt(i).setText(sectionsViewPagerAdapter.getPageTitle(i)); 
} 
0

Это небольшое изменение в код @Kalpit. Вам придется динамически добавлять эту новую вкладку в наш макет и назначать заголовок, вызывая тот же метод из адаптера, который вызывается tablayout, когда вы используете метод setupWithViewPager. Поэтому я использовал этот оператор try catch для вкладок, которые еще не созданы но вы можете попытаться присвоить им некоторый заголовок.

adapter.notifyDataSetChanged(); 
    for(int i = 0;i<adapter.getCount();i++){ 
     try{ 
     tablayout.getTabAt(i).setText(adapter.getPageTitle(i)); 
     } 
     catch(IndexOutOfBoundException e){ 
     tablayout.addTab(tablayout.newTab().setText(adapter.getPageTitle(i)); 
     } 
    } 
Смежные вопросы