【问题标题】:Set selected tab indicator in Java code在 Java 代码中设置选定的选项卡指示器
【发布时间】:2016-02-05 03:34:14
【问题描述】:

我有一个NavigationView,我想将它设置为与ViewPagerTabLayout 一起工作。

NavigationView 中单击item 应:

  1. 将用户带到对应的fragment

  2. 相应地设置TabLayout指标

我设法使用mViewPager.setCurrentItem() 完成了第一个任务,但我无法修复第二个任务。我试过了:

  1. 通过TabLayout 检索tab 并“选择”它:

    mTabLayout.getTabAt(TAB_POSITION).select();
    

    但它是一个半身像。 (Tab indicator)

  2. 在每次点击item 后调用mTabLayout.setupWithViewPager(mViewPager);,但结果相同。 (TabLayout tab selection)。

编辑 - 代码:

    mViewPager = (ViewPager) findViewById(R.id.viewpager);
    mViewPager.setAdapter(mAdapter);
    mTabLayout = (TabLayout) findViewById(R.id.tablayout);
    mTabLayout.setupWithViewPager(mViewPager);

    mViewPager.addOnPageChangeListener(new PageChangeListener()); 

..... .....

class PageChangeListener implements ViewPager.OnPageChangeListener {

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

    }

    @Override
    public void onPageSelected(int position) {
        switch (position) {
            case 0:
                mTabLayout.getTabAt(0).select();
                break;
            case 1:
                mFloatingAddButton.setVisibility(View.VISIBLE);
                mTabLayout.getTabAt(1).select();
                break;
            default:
                mFloatingAddButton.setVisibility(View.INVISIBLE);
                mTabLayout.getTabAt(2).select();
                break;
        }
    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }
}

我怎样才能设法将所有东西联系在一起?

【问题讨论】:

    标签: android android-layout tabs android-viewpager android-tablayout


    【解决方案1】:

    TabLayout类的方法setupWithViewPager中,我们可以看到在view pager上设置了一个回调:

    viewPager.addOnPageChangeListener(new TabLayoutOnPageChangeListener(this));

    TabLayoutOnPageChangeListener类中,这里是onPageSelected的方法:

    public void onPageSelected(int position) {
    final TabLayout tabLayout = mTabLayoutRef.get();
                if (tabLayout != null && tabLayout.getSelectedTabPosition() != position) {
                    // Select the tab, only updating the indicator if we're not being dragged/settled
                    // (since onPageScrolled will handle that).
                    tabLayout.selectTab(tabLayout.getTabAt(position),
                            mScrollState == ViewPager.SCROLL_STATE_IDLE);
                }
            }
    

    所以这里我们可以看到,当viewpager改变其内容时,tablayout应该选择好的tab。

    您是否在设置ViewPager 的适配器后立即致电setupWithViewPager

    【讨论】:

    • 在设置 ViewPager 的适配器后,我确实调用了 setupWithViewPager。不管怎样,我试着照你说的做,但是没有用。
    • 你有没有尝试调试看看这个方法是不是真的被调用了?你能展示你的代码吗?
    • 问题不是“你调试了吗”,而是“你有没有从TabLayoutOnPageChangeListener调试方法onPageSelected”,这不是很明显。 mTabLayout.getTabAt(0).select(); 使用 setupWithPager 已经为您做到了,如上面的 onPageSelected 代码片段所示。也许它会连续设置两次后果。尝试在您的交换机中删除这些调用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多