Android TabLayout 不重新加载 fragment

标签 android android-fragments navigation-drawer android-tabs androiddesignsupport

我注意到 TabLayout 只加载它必须显示一次的 Fragments,所以当我替换包含 TabLayout 的 Fragment 并切换回它,它不会重新创建它持有的 Fragments,因此它们不再显示任何内容。这是设计使然还是我做错了什么?我在 NavigationDrawer 中使用外部 Fragment,当用户切换到另一个 Fragment 并返回时,标签 Fragments 是空的,因为它们不会被重新创建。我还注意到,在我切换回包含它们的 fragment 后,选项卡的行为真的很奇怪(它们在跳转下方有白线,您可以在不触摸屏幕的情况下将它保持在两个选项卡之间)

我使用的代码:

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);
    }
}

最佳答案

我遇到了同样的问题,此页面中的答案解决了我的问题。只需使用 getChildFragmentManager() 而不是 getSupportFragmentManager()

Android TabLayout does not display contents anymore as soon as fragment is switched

关于Android TabLayout 不重新加载 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30833853/

相关文章:

java - Android - requestFocus 关闭键盘

java - 逻辑 fragment 与实际 fragment

android - 如何在 Android 中单击 ImageView 时从一个 fragment 移动到另一个 fragment ?

android - 外部 AsyncTask 从 Fragment 填充 ListView

android - 单击其任何项目后关闭抽屉导航

java - 当我删除Android中的数字时,应用程序崩溃。(文本字段中的内容)

java - 致命信号 11 仅在 4.4.2 上出现在后台线程中

android - angular 在 href 中的 url 之前添加不安全 - 清理不安全的 URL

android - 抽屉导航项目点击监听器不工作

android - NPE : Attempt to invoke virtual method 'java.lang.CharSequence android.support.v7.widget.Toolbar.getTitle()' on a null object reference