2016-09-09 3 views
0

Что изменилось на уровне API 24 около TabLayout? tabLayout.setOnTabSelectedListener() устарел и tabLayout.addOnTabSelectedListener() работает плохо, когда вы щелкаете на вкладке программно, слушатель работает дважды. Зачем?TabLayout на уровне API 24

Мой код.

private class TabSelectedListener implements TabLayout.OnTabSelectedListener { 

    @Override 
    public void onTabSelected(TabLayout.Tab tab) { 

     final int tabIndex = tab.getPosition(); 
     if (tabIndex == sCalendarTabIndex) { 
      openCalendar(); 
      mTabLayout.getTabAt(mBeforeSelectedTabIndex).select(); 
     } else { 
      mBeforeSelectedTabIndex = tabIndex; 
      final ViewPagerAdapter viewPagerAdapter = (ViewPagerAdapter) mViewPager 
        .getAdapter(); 

      final MyViewPagerFragment fragment = viewPagerAdapter 
        .getFragmentAtIndex(tabIndex); 

      mViewPager.setCurrentItem(mBeforeSelectedTabIndex); 
      fragment.refreshContent(); 
     } 
    } 

    @Override 
    public void onTabUnselected(TabLayout.Tab tab) { 
    } 

    @Override 
    public void onTabReselected(TabLayout.Tab tab) { 
    } 
} 
+0

Разместите код. – earthw0rmjim

ответ

0

mTabLayout.getTabAt (mBeforeSelectedTabIndex) .select(); Эта строка заставляет вашу вкладку вызываться один раз, и по умолчанию ваш TabSelectedListener вызывается один раз при нажатии на вкладку.

Индикатор автоматически устанавливается на вкладку, которую вы выбрали. Вам не нужно было устанавливать индикатор вручную.

mTabLayout.getTabAt (mBeforeSelectedTabIndex) .select(); Удалите эту строку и проверить ваш слушатель будет вызван только один раз

+0

У меня есть вкладка в конце 'TabLayout',' sCalendarTabIndex', у нее нет фрагмента, просто открывается календарь, при нажатии я выбираю последнюю выбранную вкладку, но метод 'onSelectedTab' вызывает дважды и переход к последней вкладке, которая имеет фрагмент в 'viewPager'. На платформенных инструментах android-23 это сработало хорошо. –

0

У меня есть что-то вроде этого:

@Bind(R.id.view_pager) 
ViewPager viewPager; 
@Bind(R.id.tab_layout) 
TabLayout tabLayout; 

private void addFragments() { 
    List<Fragment> fragments = new ArrayList<>(); 
    fragments.add(remoteFragment); 
    fragments.add(chatFragment); 
    fragments.add(epgFragment); 
    MyPageAdapter adapter = new MyPageAdapter(getSupportFragmentManager(), fragments); 
    viewPager.setAdapter(adapter); 
    tabLayout.setupWithViewPager(viewPager); 
    tabLayout.getTabAt(TAB_REMOTE_POSITION) 
      .setIcon(getDrawable(R.drawable.ic_settings_remote_white_24dp)); 
    tabLayout.getTabAt(TAB_SOCIAL_POSITION) 
      .setIcon(getDrawable(R.drawable.ic_group_white_24dp)); 
    tabLayout.getTabAt(TAB_EPG_POSITION) 
      .setIcon(getDrawable(R.drawable.ic_epg_fragment_24dp)); 
} 

class MyPageAdapter extends FragmentPagerAdapter { 

    private List<Fragment> fragments; 

    public MyPageAdapter(FragmentManager fm, List<Fragment> fragments) { 
     super(fm); 
     this.fragments = fragments; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return this.fragments.get(position); 
    } 

    @Override 
    public int getCount() { 
     return this.fragments.size(); 
    } 
} 

}