使用多组ViewPager+TabLayout ,发现第一组可以正常使用,第二组有就不行了。

最近在做一个APP,我在首页和分类上都是用的几乎同样的布局和代码,但是分类的fragment不会显示,而且分类的页面很奇怪。首先就是他tabLayout滑动的时候并不像首页那样一次滑动可以跳到一个tab_text,他的下划线会停在两个tab_text中间。然后就是不会显示fragment的内容,也就是白的。并且有时候在分类页面滑来滑去会影响首页的数据,让首页的数据也变为空或者乱套(即首页二的数据出现首页三上)。但是随便滑动首页是不会有这种情况的。这个问题困扰我两天了,有没有大佬给点提示方法。图在下面



这是就是那个分类页面滑动下划线停在两个tab_text中间。然后就是不显示数据。
下面是代码截图
HomeFragment

就是些绑定加入视图的操作,很正常的,这个可以正常使用
分类的fragment写的代码和这个几乎一样,就是加入的fragment不同而已。而且,如果在fenleiFragment中不自己手动加入tab名的话是无法显示出tab名的,就整个都是空的了。就是不写tab.addTab(tab.newTab().setText(title.get(0)));,让他自己去加载的话,就加载不出来名字。图一直上传不了了,我贴代码吧
title.add("分类一");
        title.add("分类二");
        title.add("分类三");
        title.add("分类四");
        title.add("分类五");
        title.add("分类六");
        tab.addTab(tab.newTab().setText(title.get(0)));
        tab.addTab(tab.newTab().setText(title.get(1)));
        tab.addTab(tab.newTab().setText(title.get(2)));
        tab.addTab(tab.newTab().setText(title.get(3)));
        tab.addTab(tab.newTab().setText(title.get(4)));
        tab.addTab(tab.newTab().setText(title.get(5)));

       fenleiyiFragment = new FenleiyiFragment();
        fenleierFragment = new FenleierFragment();
        fenleisanFragment = new FenleisanFragment();
        fenleisiFragment = new FenleisiFragment();
        fenleiwuFragment = new FenleiwuFragment();
       fenleiliuFragment = new FenleiliuFragment();

        fragments.add(fenleiyiFragment);
        fragments.add(fenleierFragment;
        fragments.add(fenleisanFragment);
        fragments.add(fenleisiFragment);
        fragments.add(fenleiwuFragment);
        fragments.add(fenleiliuFragment);

        adapter = new MyFragmentPageAdapter(getFragmentManager(),title,fragments);
        viewpager.setAdapter(adapter);
        tab.setupWithViewPager(viewpager);

就是他们两个用的视图,我都是用的一样的,图一直上传不了了,我贴代码吧
然后他们的视图代码我用的都是一样,当然会各自在不同的xml文件里
<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        >
        <android.support.design.widget.TabLayout
            android:id="@+id/tab"
            android:layout_width="match_parent"
            android:layout_height="30dp"
            app:tabSelectedTextColor="@color/word_select"
            app:tabPaddingStart="5dp"
            app:tabMinWidth="70dp"
            app:tabPaddingEnd="8dp"
            app:tabTextColor="#666666"
            app:tabIndicatorColor="#FD605D"
            app:tabIndicatorFullWidth="false"
            app:tabMode="scrollable"
            >
        </android.support.design.widget.TabLayout>
        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <android.support.v4.view.ViewPager
                android:id="@+id/viewpager"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@android:color/white" />
        </FrameLayout>
    </LinearLayout>

MyFragmentPageAdapter代码,应该也没什么问题
public class MyFragmentPageAdapter extends FragmentPagerAdapter {

    private ArrayList<String> tab_title;
    private ArrayList<Fragment> fragments;

    public MyFragmentPageAdapter(FragmentManager fm,ArrayList<String> tab_title , ArrayList<Fragment> fragments) {
        super(fm);
        this.tab_title = tab_title;
        this.fragments = fragments;
    }


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

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

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

    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {

    }
}

我也是个新手,这个问题困扰我两天了,我不太懂到底是哪里出的问题,请各位大佬指教一下,万分感谢。

 

========================================================

解决方案,搞了很久测试了很久,在两个fragment中把adapter = new MyFragmentPageAdapter(getFragmentManager(),title,fragments);改成如下所示,就可以了。真是件很神奇的事。

getFragmentManager()所得到的是所在fragment 的父容器的管理器,
getChildFragmentManager()所得到的是在fragment  里面子容器的管理器。

getSupportFragmentManager()主要用于支持 3.0以下android系统API版本,3.0以上系统可以直接调用getFragmentManager() ,因为fragment是3.0以后才出现的组件,为了这之前的系统版本也能使用fragment,借助V4包里面的getSupportFragmentManager()方法来间接获取FragmentManager()对象,3.0版本之后,有了Fragment的api,就可以直接使用getFragmentManager()这个方法来获取对象。

 

如上所述,我在父fragement内想去管理子fragment,当然应该用getChildFragmentManager()啦。自己被困扰了两天,很影响进度,值得记录。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值