在viewPager.setCurrentItem()之后未突出显示TabLayout选项卡文本

时间:2016-02-15 23:12:56

标签: android android-viewpager android-tablayout

我的ViewLager附带的TabLayout存在问题。 Repro步骤:

  1. 从第一个标签开始。
  2. 选择第二个标签。
  3. 按后退按钮 - 我的代码看到用户在第二个标签页上并调用viewPager.setCurrentItem(0)将用户返回到第一个标签页。
  4. 但是,如图所示,当第一个标签文本显示为灰色时,仍然会选择第二个标签文本。 (虽然粉红色条会像它应该的那样回到第一个标签。)
  5. enter image description here

    我错过了什么?

    tabLayout = (TabLayout) rootView.findViewById(R.id.tab_layout_main);
    tabLayout.addTab(tabLayout.newTab().setText(getActivity().getString(R.string.main_tab_grades)));
    tabLayout.addTab(tabLayout.newTab().setText(getActivity().getString(R.string.main_tab_schedule)));
    
    viewPager = (NonSwipeableViewPager) rootView.findViewById(R.id.pager_main);
    pagerAdapter = new PagerAdapterMain(getActivity(), getChildFragmentManager(), tabLayout.getTabCount());
    viewPager.setAdapter(pagerAdapter);
    
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
    
    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            viewPager.setCurrentItem(tab.getPosition());
        }
    
    
        @Override
        public void onTabUnselected(TabLayout.Tab tab) {
            return;
        }
    
        @Override
        public void onTabReselected(TabLayout.Tab tab) {
            return;
        }
    });
    

7 个答案:

答案 0 :(得分:7)

也许这是设计库的错误。正如问题所说: https://code.google.com/p/android/issues/detail?id=192834

代码对我有用:

  

// mViewPager.setCurrentItem(position);

mTabLayout.getTabAt(position).select();

答案 1 :(得分:5)

您可以尝试通过tablayout而不是viewPager选择标签。

tabLayout.getTabAt(0).select();

答案 2 :(得分:1)

面临独特的问题。当我们设置setCurrentItem时。它不会更改tablayout的选项卡。然后你必须在viewpager上添加onOPageChangeListener,你必须手动为所选的viewpager的位置选择tablayout的选项卡。然后setupWithViewPager。

注意:只有在添加addOnPageChangeListener后才需要设置setupWithViewPager。天知道为什么。这是有效的。如果我以前setupWithViewPager,它不起作用。再一次,全能者只知道。

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);

答案 3 :(得分:1)

以上都没有工作......最后固定设置滚动位置

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

答案 4 :(得分:0)

tabLayout.getTabAt(0).getCustomView()的setSelected(真)。 我不认为它是TabLayout的错误,如果你想设置第一个视图突出显示,你应该调用像我这样的方法,然后你设置的customView将被无效

答案 5 :(得分:0)

我添加这可以修复此错误:         tabLayout.getTabAt(0).getCustomView()的setSelected(真);

答案 6 :(得分:0)

我修复了它升级到com.android.support:design:23.4.0版本23.1.0有问题。