andro
andro

Reputation: 1007

viewpager setCurrentItem not changing tablayout selected color

i am using viewpager and tab layout

     viewPager.setAdapter(Adapter);
   tablayout.setupWithViewPager(viewPager);

   viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        int cPage;

        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        }

        @Override
        public void onPageSelected(int position) {


                cPage = position;

        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

now when i swipe selected tab color is changing but when i call

                viewPager.setCurrentItem(1, true);

its not changing new tab layout color . say i have 2 tabs when i am 1st it setting text color green for 1st tab and when i swipe it giving 2nd tab color green .. but when i call

            viewPager.setCurrentItem(1, true);

in this my 1st tab is green not 2nd tab

Upvotes: 9

Views: 13178

Answers (7)

Uwe
Uwe

Reputation: 1

viewPager.setCurrentItem(1, true); has to be run on UI Thread

Upvotes: 0

Alex Burov
Alex Burov

Reputation: 1951

Had the same issue, with tab in TabLayout not being selected after we have swiped the ViewPager, i.e. when we were swiping the ViewPager the tab stood the same. Solution (Kotlin):

viewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
        override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {}

        override fun onPageSelected(position: Int) {
            viewPager.setCurrentItem(position, false)
            tabLayout.getTabAt(position)?.select()
        }

        override fun onPageScrollStateChanged(state: Int) {}
    })

Upvotes: 0

Aniruddha K.M
Aniruddha K.M

Reputation: 7511

This is known bug in Design support library even in version 24.1.1 it exists, i was able to find a work around for this issue by using a co-ordinator layout as the parent(root) layout

Upvotes: -1

Sabeer
Sabeer

Reputation: 4120

Try this worked for me...

tabLayout.setScrollPosition(position,0f,true);

Upvotes: 6

rajesh
rajesh

Reputation: 41

Faced unique problem. When we set setCurrentItem. It does not change tablayout's tab. Then you have to addOnPageChangeListener on viewpager in which you have to select the tablayout's tab manually for selected viewpager's position. Then setupWithViewPager.

Note : setupWithViewPager needs to be set only after addOnPageChangeListener added. God knows why. This is what worked. if I setupWithViewPager before, it does not work. Again, almighty only knows.

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                @Override
                public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                }

                @Override
                public void onPageSelected(int position) {
                    viewPager.setCurrentItem(position,false);
                    tabLayout.getTabAt(position).select();
                }

                @Override
                public void onPageScrollStateChanged(int state) {
                }
            });

            /*
              NOTE: This is setup after addOnPageChangeListener. Don't know why but this is what works. Otherwise tabLayout.does not select.
            */
            tabLayout.setupWithViewPager(this.viewPager);

Upvotes: 1

BinqiangSun
BinqiangSun

Reputation: 690

https://stackoverflow.com/a/35843370/4302046

// mViewPager.setCurrentItem(position);

mTabLayout.getTabAt(position).select();

Upvotes: 6

Suhas Bachewar
Suhas Bachewar

Reputation: 1230

In your activity:

 // init TabLayout
        TabLayout tabLayout = (TabLayout) view.findViewById(R.id.tab_layout);
        if (mCallFrom.equalsIgnoreCase(ActivityConstantUtils.sCalledFromActPanel)) {
            // To add Memory
            tabLayout.addTab(tabLayout.newTab().setText(R.string.add_memory_caption));
            tabLayout.addTab(tabLayout.newTab().setText(R.string.add_memory_effects));
//            tabLayout.addTab(tabLayout.newTab().setText(R.string.add_memory_frames));
        } else {
            // To add Memory from Recipe & Blog
            tabLayout.addTab(tabLayout.newTab().setText(R.string.add_memory_caption));
            tabLayout.setSelectedTabIndicatorColor(Color.TRANSPARENT);
        }
        changeTabsFont(tabLayout);
        showDivider(tabLayout);
        tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
        final ViewPager viewPager = (ViewPager) getActivity().findViewById(R.id.pager);
        final PagerAdapter adapter = new PagerAdapter(this.getFragmentManager(), tabLayout.getTabCount());
        viewPager.setAdapter(adapter);
        viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
        tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                if (tab.getPosition() == 1) {
                    Utils.hideSoftKeyboard(view, getActivity());
                }
                viewPager.setCurrentItem(tab.getPosition());
            }

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

            }

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

            }
        });

//Style apply to tablayout

<style name="ActPanelTabLayout.Theme" parent="Widget.Design.TabLayout">
        <item name="tabIndicatorColor">@color/memory_color_80</item>\
        <item name="android:textColor">@color/act_tab_black</item>
        <item name="tabSelectedTextColor">@color/act_tab_selector_text_color</item>
        <item name="tabTextAppearance">@style/TextAppearance.Jacksonville.ActTab</item>
    </style>

Upvotes: 3

Related Questions