android – ViewPager里面的Fragment

前端之家收集整理的这篇文章主要介绍了android – ViewPager里面的Fragment前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

相应的java类如下:

  1. public class Tracks extends Fragment {
  2. ViewPager viewPager;
  3. TabLayout tabLayout;
  4. @Nullable
  5. @Override
  6. public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
  7. View view = inflater.inflate(R.layout.tracks,container,false);
  8. viewPager = (ViewPager) view.findViewById(R.id.viewpager);
  9. tabLayout = (TabLayout) view.findViewById(R.id.tabLayout);
  10. AppCompatActivity activity = (AppCompatActivity) getActivity();
  11. assert activity.getSupportActionBar() != null;
  12. activity.getSupportActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.app_theme)));
  13. return view;
  14. }
  15. @Override
  16. public void onActivityCreated(@Nullable Bundle savedInstanceState) {
  17. super.onActivityCreated(savedInstanceState);
  18. setupViewPager(viewPager);
  19. tabLayout.setupWithViewPager(viewPager);
  20. tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
  21. @Override
  22. public void onTabSelected(TabLayout.Tab tab) {
  23. }
  24. @Override
  25. public void onTabUnselected(TabLayout.Tab tab) {
  26. }
  27. @Override
  28. public void onTabReselected(TabLayout.Tab tab) {
  29. }
  30. });
  31. }
  32. private void setupViewPager(ViewPager viewPager) {
  33. ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(getChildFragmentManager());
  34. viewPagerAdapter.addFragment(new TopTracks(),"Top Tracks");
  35. viewPagerAdapter.addFragment(new WorldCharts(),"World Charts");
  36. viewPagerAdapter.addFragment(new NewMusic(),"New Music");
  37. viewPagerAdapter.addFragment(new AfricaHot(),"Africa Hot");
  38. viewPagerAdapter.addFragment(new Playlists(),"Playlists");
  39. viewPagerAdapter.addFragment(new Recommended(),"Recommended");
  40. viewPager.setAdapter(viewPagerAdapter);
  41. }
  42. private class ViewPagerAdapter extends FragmentPagerAdapter {
  43. List

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

The tablayout is present but tabs are absent

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

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

  1. @Override
  2. public void onActivityCreated(@Nullable Bundle savedInstanceState) {
  3. super.onActivityCreated(savedInstanceState);
  4. setupViewPager(viewPager);
  5. // after you set the adapter you have to check if view is laid out,i did a custom method for it
  6. if (ViewCompat.isLaidOut(tabLayout)) {
  7. setViewPagerListener();
  8. } else {
  9. tabLayout.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
  10. @Override
  11. public void onLayoutChange(View v,int left,int top,int right,int bottom,int oldLeft,int oldTop,int oldRight,int oldBottom) {
  12. setViewPagerListener();
  13. tabLayout.removeOnLayoutChangeListener(this);
  14. }
  15. });
  16. }
  17. }
  18. private void setViewPagerListener() {
  19. tabLayout.setupWithViewPager(viewPager);
  20. // use class TabLayout.ViewPagerOnTabSelectedListener
  21. // note that it's a class not an interface as OnTabSelectedListener,so you can't implement it in your activity/fragment
  22. // methods are optional,so if you don't use them,you can not override them (e.g. onTabUnselected)
  23. tabLayout.setOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(viewPager) {
  24. @Override
  25. public void onTabReselected(TabLayout.Tab tab) {
  26. super.onTabReselected(tab);
  27. }
  28. @Override
  29. public void onTabSelected(TabLayout.Tab tab) {
  30. super.onTabSelected(tab);
  31. }
  32. });
  33. }

猜你在找的Android相关文章