8

TabLayout一度表示する必要があるロードのみに気付いたので、含むFragmentsを置き換えて元に戻すと、保持されているロードが再作成されないため、何も表示されなくなります。これはそのような設計によるものですか、それとも何か間違っていますか? でアウターを使用していますが、ユーザーが別のタブに切り替えて元に戻すと、タブが再作成されないため、タブが空になります。また、タブを含むフラグメントに切り替えた後、タブが非常に奇妙に動作することにも気付きました (ジャンプの下に白い線が表示され、画面に触れずに 2 つのタブの間で静止したままにすることができます)。FragmentTabLayoutFragmentsFragmentNavigationDrawerFragmentFragments

私が使用しているコード:

public class Fragment1 extends Fragment {
    private static ViewPager viewPager;
    private static TabLayout tabLayout;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        Utils.changeLanguage(getActivity());

        final Context contextThemeWrapper = new ContextThemeWrapper(getActivity(), R.style.LinesOverlay);

        LayoutInflater localInflater = inflater.cloneInContext(contextThemeWrapper);

        View view = localInflater.inflate(R.layout.fragment1, container, false);
        viewPager = (ViewPager) view.findViewById(R.id.viewpager);
        tabLayout = (TabLayout) view.findViewById(R.id.tabs);

        return view;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        setupViewPager(viewPager);
        tabLayout.setupWithViewPager(viewPager);
    }

    private void setupViewPager(ViewPager viewPager) {
        LinesTabsAdapter adapter = new LinesTabsAdapter(getActivity().getSupportFragmentManager());
        adapter.addFragment(new Fragment2(), "Fragment 1");
        adapter.addFragment(new Fragment3(), "Fragment 2");
        viewPager.setAdapter(adapter);
    }

    public static class Fragment2 extends Fragment {

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

            View view = inflater.inflate(R.layout.activity_lines_driving, container, false);

            return view;
        }

        @Override
        public void onActivityCreated(Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
        }
    }

    public static class Fragment3 extends Fragment  {

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

            View view = inflater.inflate(R.layout.activity_lines_all, container, false);

            return view;
        }

        @Override
        public void onActivityCreated(Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
        }
    }

LinesTabsAdapter:

public class LinesTabsAdapter extends FragmentPagerAdapter {
    private final List<Fragment> fragments = new ArrayList<>();
    private final List<String> fragmentTiles = new ArrayList<>();

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

    public void addFragment(Fragment fragment, String title) {
        fragments.add(fragment);
        fragmentTiles.add(title);
    }

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

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

    @Override
    public CharSequence getPageTitle(int position) {
        return fragmentTiles.get(position);
    }
}
4

2 に答える 2

20

このページの同じ問題と回答が私の問題を解決しました。getChildFragmentManager()代わりに使用するだけですgetSupportFragmentManager()

Android TabLayout は、フラグメントが切り替えられるとすぐにコンテンツを表示しなくなりました

于 2015-12-20T22:41:38.360 に答える