android – ViewPager里面的Fragment

我正在尝试使用新的Android支持设计库将一个viewpager添加一个片段.我有布局的xml代码,如下所示:

相应的java类如下:

public class Tracks extends Fragment {

    ViewPager viewPager;
    TabLayout tabLayout;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.tracks,container,false);

        viewPager = (ViewPager) view.findViewById(R.id.viewpager);
        tabLayout = (TabLayout) view.findViewById(R.id.tabLayout);

        AppCompatActivity activity = (AppCompatActivity) getActivity();
        assert activity.getSupportActionBar() != null;
        activity.getSupportActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.app_theme)));

        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        setupViewPager(viewPager);
        tabLayout.setupWithViewPager(viewPager);

        tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });
    }

    private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(getChildFragmentManager());
        viewPagerAdapter.addFragment(new TopTracks(),"Top Tracks");
        viewPagerAdapter.addFragment(new WorldCharts(),"World Charts");
        viewPagerAdapter.addFragment(new NewMusic(),"New Music");
        viewPagerAdapter.addFragment(new AfricaHot(),"Africa Hot");
        viewPagerAdapter.addFragment(new Playlists(),"Playlists");
        viewPagerAdapter.addFragment(new Recommended(),"Recommended");
        viewPager.setAdapter(viewPagerAdapter);
    }

    private class ViewPagerAdapter extends FragmentPagerAdapter {

        List

viewpager工作正常,除了我的标签不会显示的事实.我得到的是以下屏幕:

The tablayout is present but tabs are absent

我已多次浏览代码,但我似乎仍然无法解决我的代码有什么问题

最佳答案
这是与ViewCompat相关的设计支持库的常见错误.

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    setupViewPager(viewPager);
    // after you set the adapter you have to check if view is laid out,i did a custom method for it
    if (ViewCompat.isLaidOut(tabLayout)) {
        setViewPagerListener();
    } else {
        tabLayout.addOnLayoutchangelistener(new View.OnLayoutchangelistener() {
           @Override
           public void onLayoutChange(View v,int left,int top,int right,int bottom,int oldLeft,int oldTop,int oldRight,int oldBottom) {
                setViewPagerListener();
                tabLayout.removeOnLayoutchangelistener(this);
           }
       });
    }
}

private void setViewPagerListener() {
    tabLayout.setupWithViewPager(viewPager);
    // use class TabLayout.ViewPagerOnTabSelectedListener
    // note that it's a class not an interface as OnTabSelectedListener,so you can't implement it in your activity/fragment
    // methods are optional,so if you don't use them,you can not override them (e.g. onTabUnselected)
    tabLayout.setonTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(viewPager) {
        @Override
        public void onTabReselected(TabLayout.Tab tab) {
            super.onTabReselected(tab);
        }

        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            super.onTabSelected(tab);
        }
    });
}

相关文章

这篇“android轻量级无侵入式管理数据库自动升级组件怎么实现...
今天小编给大家分享一下Android实现自定义圆形进度条的常用方...
这篇文章主要讲解了“Android如何解决字符对齐问题”,文中的...
这篇文章主要介绍“Android岛屿数量算法怎么使用”的相关知识...
本篇内容主要讲解“Android如何开发MQTT协议的模型及通信”,...
本文小编为大家详细介绍“Android数据压缩的方法是什么”,内...