0

What changed on API Level 24 about TabLayout? tabLayout.setOnTabSelectedListener() is deprecated and tabLayout.addOnTabSelectedListener() is working bad, when you click on tab programatically, the listener is working twice. Why?

My code.

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) {
    }
}
Arsen Nersisyan
  • 458
  • 5
  • 18

2 Answers2

0

mTabLayout.getTabAt(mBeforeSelectedTabIndex).select(); This line makes your tab to be called once and by default your TabSelectedListener is called once when you click on tab.

Indicator is set automatically to the tab which you have selected. You didnt need to set the indicator manually.

mTabLayout.getTabAt(mBeforeSelectedTabIndex).select(); Remove this line and check your listener will be called only once

  • I have a tab at the end of `TabLayout` , `sCalendarTabIndex`, it's haven't fragment, it's just open a calendar, on click I'm selecting the last selected tab, but the `onSelectedTab` method is calling twice and going to last tab which have fragment in `viewPager`. On android-23 platform-tools it was worked nice. – Arsen Nersisyan Sep 09 '16 at 09:20
0

I have something like that:

 @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();
    }
}

}

Rodriquez
  • 981
  • 1
  • 7
  • 21