Android tablayout选择最后一个标签而不是第一个标签

时间:2015-11-18 12:40:24

标签: android android-tablayout

我需要你的帮助。我有一个带有tintable imageview和textview的tablayout。我想突出显示默认选择的选项卡,这是第一个。 这是我的示例代码:

TabLayout.Tab tab;
mTabs = (TabLayout) findViewById(R.id.tabs);
mViewpager = (ViewPager) findViewById(R.id.viewpager);
MyPagerAdapter pagerAdapter = new MyPagerAdapter(getSupportFragmentManager());

mViewpager.setAdapter(pagerAdapter);
mViewpager.addOnPageChangeListener(new MyPageScrollListener(mTabs));
mTabs.setupWithViewPager(mViewpager);

// Iterate over all tabs and set the custom view
for (int i = 0; i < mTabs.getTabCount(); i++) {
    tab = mTabs.getTabAt(i);
    tab.setCustomView(pagerAdapter.getTabView(i));
}

mTabs.setOnTabSelectedListener(new MyOnTabSelectedListener());   
tab.select();

但它正在选择最后一个标签。这里有人知道如何解决这个问题吗?我很感激任何帮助。谢谢!

3 个答案:

答案 0 :(得分:1)

最后,我在这里找到了一个解决方案:link

我补充说:

[sender setBackgroundImage: [UIImage imageNamed:@"cardback"] forState:UIControlStateNormal];

它有效!

答案 1 :(得分:0)

您选择了最后一个标签。 看一下你的源代码:)

TabLayout.Tab tab;
...
for (int i = 0; i < mTabs.getTabCount(); i++) {
    tab = mTabs.getTabAt(i);
}
...
tab.select();

tab是您使用getTabAt(int position)获得的最后一个标签。

因此,当您想要选择第一个标签时,这将有助于

maTabs.getTabAt(0).select();

另一个(可能更好的)解决方案是将for循环转换为

for (int i = mTabs.getTabCount() - 1; i >= 0; i--) {
        tab = mTabs.getTabAt(i);
}

然后你的&#34;最后&#34;您进入此循环的tabTabLayout中的第一个标签。

完整的示例代码看起来像this gist

答案 2 :(得分:0)

我找到了更好的解决方案。相反,如果从TabLayout中选择选项卡,您可以使用ViewPager执行此操作,如下所示:

ViewPager viewPager = (ViewPager) findViewById(R.id.restaurant_menu_viewPager);
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(adapter);

// ViewPager mit TabLayout verknüpfen
TabLayout tabLayout = (TabLayout) findViewById(R.id.restaurant_menu_tabLayout);
tabLayout.setupWithViewPager(viewPager);
viewPager.setCurrentItem(1);

请看这里的帖子: https://stackoverflow.com/a/38762670/7318519