TabLayout在棉花糖上不显示标签标题 [英] TabLayout not displaying tab title on Marshmallow

查看:129
本文介绍了TabLayout在棉花糖上不显示标签标题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我遇到一个奇怪的问题,即在棉花糖设备上测试我的应用程序时,选项卡的标题没有显示.当我在所有其他设备上对其进行测试时,标题显示就很好.调试时,设备会碰到所有相同的点,包括适配器内部的"getPageTitle"方法.我已经通读了许多使用android的TabLayout和ViewPager的教程,只是为了确定我没有丢失任何东西,并且据我所知,我没有做错任何事情.

I'm having a strange issue with the titles of my tabs not showing up when I test my app on a marshmallow device. When I test it on all other devices, the titles show up just fine. While debugging, the device hits all of the same points including the the "getPageTitle" method inside my adapter. I've read through many tutorials for using android's TabLayout and ViewPager, just to make absolutely certain I'm not missing anything, and from what I can tell, I am not doing anything wrong.

这是我主要活动中的代码,

Here is the code in my main activity,

// setup viewPager
final ViewPager viewPager = (ViewPager) findViewById(R.id.viewPager);
setupViewPager(viewPager);

// setup tabLayout
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabLayout);
tabLayout.setupWithViewPager(viewPager);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));

我的setUpViewPager()方法,

my setUpViewPager() method,

private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapter adapter = new ViewPagerAdapter(getFragmentManager());
    viewPager.setAdapter(adapter);
}

和我的扩展FragmentPagerAdapter的适配器类

and my adapter class which extends FragmentPagerAdapter

private class ViewPagerAdapter extends FragmentPagerAdapter {
    private static final int NUM_FRAGMENTS = 2;

    public ViewPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0: return AllFeaturesFragment.newInstance();
            case 1: return CategoriesFragment.newInstance();
        }
        return null;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        switch (position) {
            case 0: return "All Features";
            case 1: return "Categories";
        }
        return null;
    }

    @Override
    public int getCount() {
        return NUM_FRAGMENTS;
    }
}

任何帮助将不胜感激!

编辑

我从来没有想过要检查xml文件的答案,但是我在TabLayout元素上使用了一种样式,其父样式为"Widget.AppCompat.Toolbar".由于某种原因,这种风格使标题在棉花糖设备上不可见,而在其他任何东西上都不可见.我要做的就是删除样式,并且效果很好!

It never occurred to me to check the xml file for the answer, but I was using a style on the TabLayout element whose parent style was "Widget.AppCompat.Toolbar". For some reason this style made the titles invisible on marshmallow devices and none others. All I had to do was remove the style and it worked fine!

推荐答案

我也遇到了同样的问题.问题是当您硬编码时,支持库中有一些问题分页器适配器内的标签磁贴.我这样更改了寻呼机适配器

I was also facing the same issue. The issue is there is some issue in support library when you hardcode the tab tiles inside pager adapter. I changed the pager adapter like this

 class ViewPagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager manager) {
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }

    public void addFragment(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }
}
}

然后您可以将片段添加到活动中

then you can add the fragment in activity like this

public class MainActivity extends AppCompatActivity {

private Toolbar toolbar;
private TabLayout tabLayout;
private ViewPager viewPager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    viewPager = (ViewPager) findViewById(R.id.viewpager);
    setupViewPager(viewPager);

    tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(viewPager);
}

private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFragment(new OneFragment(), "ONE");
    adapter.addFragment(new TwoFragment(), "TWO");
    adapter.addFragment(new ThreeFragment(), "THREE");
    viewPager.setAdapter(adapter);
}
}

这篇关于TabLayout在棉花糖上不显示标签标题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆