【问题标题】:android.support.design.widget.TabLayout not working properly with ViewPagerandroid.support.design.widget.TabLayout 无法与 ViewPager 一起正常工作
【发布时间】:2016-09-13 00:41:06
【问题描述】:

android.support.design.widget.TabLayout 无法与 ViewPager 一起正常工作 如果我设置 tabLayout.setupWithViewPager(viewPager);然后 tablayout 视图未显示,请查找附加的屏幕截图。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:fitsSystemWindows="false"
android:orientation="vertical"
tools:context=".home.HomeActivity"
tools:showIn="@layout/activity_home">

<android.support.design.widget.TabLayout
    android:id="@+id/tab_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/colorPrimary"
    android:elevation="6dp"
    android:minHeight="?attr/actionBarSize"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/>

<android.support.v4.view.ViewPager
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    android:layout_below="@id/tab_layout"/>

片段代码:

TabLayout tabLayout = (TabLayout) view.findViewById(R.id.tab_layout);       tabLayout.addTab(tabLayout.newTab().setText(getActivity().getResources().getText(R.string.feeds)));        tabLayout.addTab(tabLayout.newTab().setText(getActivity().getResources().getText(R.string.following)));        tabLayout.addTab(tabLayout.newTab().setText(getActivity().getResources().getText(R.string.you)));
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
    final ViewPager viewPager = (ViewPager) view.findViewById(R.id.pager);
    final PageAdapter adapter = new PageAdapter(getChildFragmentManager(), 3);
    viewPager.setOffscreenPageLimit(3);
    viewPager.setAdapter(adapter);
    tabLayout.setupWithViewPager(viewPager);

当删除“tabLayout.setupWithViewPager(viewPager);”视图工作正常。但是当点击相应的选项卡时,我需要导航相应的片段。

【问题讨论】:

  • 看看我的这个答案Click here我相信它会帮助你。
  • @vrund,谢谢!它的工作

标签: android android-viewpager android-tablayout


【解决方案1】:

在我的情况下,我通过替换解决了这个问题,

tabLayout.setupWithViewPager(viewPager);

作者,

viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(
                        tabLayout));
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                viewPager.setCurrentItem(tab.getPosition());
            }

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

            }

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

            }
});

希望对你有所帮助。

【讨论】:

  • 这是一个已弃用的类。你应该只使用“''tabLayout.setupWithViewPager(viewPager);''''。只是在你的适配器中你需要覆盖''''方法 public CharSequence getPageTitle(int position)'''''
【解决方案2】:

如果您在片段中使用 tabLayout,请尝试此答案

可能的错误

您需要将 getChildFragmentManager() 传递给 FragmentPagerAdapter

不是 getSupportFragmentManager() 或 getFragmentManager()

//wrong one
ViewPagerAdapter adapter = new ViewPagerAdapter(getActivity().getSupportFragmentManager()); 
//correct one
ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager());

ViewPagerAdapter 是 FragmentPagerAdapter

public class ViewPagerAdapter extends FragmentPagerAdapter {

}

【讨论】:

  • 我已经在代码中添加了getChildFragmentManager(),请看代码,这不是这个问题的确切答案。
  • @NaveenKumarM 请再读一遍。如果有人错误地使用 getFragmentManager() 或 getSupportFragmentManager() 选项卡布局在片段中不起作用。这就是我回答的原因。如果您已经在使用 getChildFragmentManager() --> 这不适合您。请参考其他答案。
【解决方案3】:

解决方案的简短版本 (Naveen Kumar M):

viewPager.addOnPageChangeListener(
    new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.addOnTabSelectedListener(
    new TabLayout.ViewPagerOnTabSelectedListener(viewPager));

【讨论】:

  • 这是解决此问题的最佳且紧凑的解决方案。
【解决方案4】:

试试这个
将此添加到 viewpager。

app:layout_behavior="@string/appbar_scrolling_view_behavior"

同时保持父级作为协调器布局,然后只有滚动才能正常工作

参考这里:http://coderzpassion.com/working-appbarlayout-like-whatsapp/

【讨论】:

    【解决方案5】:

    检查 getCount()。 不要将其返回为 NULL!返回空白片段。

    package my.package;
    
    import android.support.annotation.Nullable;
    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentManager;
    import android.support.v4.app.FragmentStatePagerAdapter;
    
    public class tabPagers extends FragmentStatePagerAdapter {
    
        String[] titles = new String[]{"Home", "Campus", "Course"};
    
        public tabPagers(FragmentManager fm) {
            super(fm);
        }
    
        @Nullable
        @Override
        public CharSequence getPageTitle(int position) {
            return titles[position];
        }
    
        @Override
        public Fragment getItem(int position) {
            BlankFragment blankFragment = new BlankFragment();
            Blank2Fragment blank2Fragment = new Blank2Fragment();
            Blank3Fragment blank3Fragment = new Blank3Fragment();
            switch (position) {
                case 0:
                    return blankFragment;
                case 1:
                    return blank2Fragment;
                case 3:
                    return blank3Fragment;
    
            }
            return  blankFragment; //This one is important
        }
    
        @Override
        public int getCount() {
            return titles.length; //This one is important too
        }
    }
    

    【讨论】:

      【解决方案6】:

      https://developer.android.com/reference/com/google/android/material/tabs/TabLayout#viewpager-integration

      <androidx.viewpager.widget.ViewPager
       android:layout_width="match_parent"
       android:layout_height="match_parent">
      
       <com.google.android.material.tabs.TabLayout
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:layout_gravity="top" />
      
      </androidx.viewpager.widget.ViewPager>
      

      【讨论】:

        猜你喜欢
        • 2016-07-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-14
        • 2020-08-19
        • 2013-02-06
        • 2019-02-02
        相关资源
        最近更新 更多