web-dev-qa-db-ja.com

viewpagersetCurrentItemはタブレイアウトの選択された色を変更しません

ビューページャーとタブレイアウトを使用しています

     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つのタブがあると言うと、最初のタブにテキストの色を緑に設定し、スワイプすると2番目のタブの色を緑に設定します..しかし、電話をかけると

            viewPager.setCurrentItem(1, true);

この中で私の最初のタブは2番目のタブではなく緑色です

9
andro

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

// mViewPager.setCurrentItem(position);

mTabLayout.getTabAt(position).select();

6
BinqiangSun

これが私のために働いてみてください...

tabLayout.setScrollPosition(position,0f,true);
5
Sabeer Mohammed

あなたの活動では:

 // 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>
2
Suhas Bachewar

同じ問題があり、ViewPagerをスワイプした後、つまりViewPagerをスワイプしたときに、TabLayoutのタブが選択されていませんでした。タブは同じままでした。解決策(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) {}
    })
0
Alex Burov

独特の問題に直面した。 setCurrentItemを設定するとき。 tablayoutのタブは変更されません。次に、ビューページャーにOnPageChangeListenerを追加する必要があります。この場合、選択したビューページャーの位置に対してタブレイアウトのタブを手動で選択する必要があります。次に、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);
0
rajesh