android – ViewPager里面的Fragment

前端之家收集整理的这篇文章主要介绍了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相关文章