android viewpager setCurrentItem不更改选项卡布局选定颜色

7ivaypg9  于 2022-11-03  发布在  Android
关注(0)|答案(7)|浏览(167)

我正在使用viewpager和选项卡布局

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

        }
    });

现在,当我滑动选定的标签颜色是变化的,但当我调用

viewPager.setCurrentItem(1, true);

它不改变新的标签页布局颜色。说我有2个标签页,当我是第一它设置文本颜色绿色为第一标签页,当我滑动它给第二标签页颜色绿色。。但当我调用

viewPager.setCurrentItem(1, true);

在此,我的第一个选项卡是绿色的,而不是第二个选项卡

oprakyz7

oprakyz71#

https://stackoverflow.com/a/35843370/4302046
// mViewPager.设置当前项(位置);
(位置)。select();

qyyhg6bp

qyyhg6bp2#

试试这个对我有用...

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

pftdvrlh3#

在您的活动中:

// 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 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>
rm5edbpk

rm5edbpk4#

遇到了一个独特的问题。当我们设置setCurrentItem时,它不会更改tablayout的选项卡。然后,您必须在viewpager上添加OnPageChangeListener,您必须在其中为选定的viewpager位置手动选择tablayout的选项卡。然后,setupWithViewPager。
注意:setupWithViewPager只需要在添加addOnPageChangeListener之后设置。上帝知道为什么。这是有效的。如果我之前设置了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);
czq61nw1

czq61nw15#

也有同样的问题,在我们滑动ViewPager后,TabLayout中的选项卡未被选中,即当我们滑动ViewPager时,选项卡保持不变。解决方案(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) {}
    })
yyyllmsg

yyyllmsg6#

(1,真);必须在UI线程上运行

lxkprmvk

lxkprmvk7#

这是设计支持库中的已知错误,即使在版本24.1.1中也存在,我能够通过使用坐标布局作为父(根)布局来找到此问题的解决方案

相关问题