TabLayout getChildFragmentManager()的问题

时间:2016-10-07 11:27:17

标签: android android-layout android-fragments

当我使用getChildFragmentManager()时,我的应用程序运行正常但不幸的是,它只适用于API 17及更高版本。现在,当我将其切换到getFragmentManager()时,一切正常,除了一件事。每当我在水平视图中加载我的tablayout时,两个页面都是空的,并且滑动是缓慢的。垂直方向很好,如果我先垂直加载它们然后切换到水平方向,它们就不会是空的,因为我使用的是保存的实例。我不知道造成这种情况的原因。我所知道的是,只要我将代码切换到上面,就会发生这种情况。让我知道找到问题需要什么,我很乐意发布。我正在使用support-v13库的FragmentPagerAdapter。我这样做是因为我不必使用support-v4创建片段的方式。我在tablayout片段中从v4导入ViewPager。

编辑:

好的,第一次创建tablayout时,它工作正常。当再次调用时,它将是空白且缓慢的。它与方向无关。

编辑:

Tablayout代码请记住此代码功能正常。但是当我将getChildFragmentManager()更改为getFragmentManager()时,它变得缓慢并且只能在第一个oncreate上工作

import android.app.Fragment;
import android.app.FragmentManager;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.TabLayout;
import android.support.v13.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class TabFragment extends Fragment {

public static TabLayout tabLayout;
public static ViewPager viewPager;
public static int int_items = 2;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View x = inflater.inflate(R.layout.tab_layout, null);
    tabLayout = (TabLayout) x.findViewById(R.id.tabs);
    viewPager = (ViewPager) x.findViewById(R.id.viewpager);


    viewPager.setAdapter(new MyAdapter(getChildFragmentManager()));
    tabLayout.post(new Runnable() {
        @Override
        public void run() {
            tabLayout.setupWithViewPager(viewPager);
        }
    });

    return x;

}

class MyAdapter extends FragmentPagerAdapter {

    public MyAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                return new FragmentOne();
            case 1:
                return new FragmentTwo();
        }
        return null;
    }

    @Override
    public int getCount() {

        return int_items;

    }


    @Override
    public CharSequence getPageTitle(int position) {

        switch (position) {
            case 0:
                return "TAB1";
            case 1:
                return "TAB2";
        }
        return null;
    }
}

}

0 个答案:

没有答案