3

我注意到TabLayout只加载它具有显示一旦Fragments,所以当我替换包含TabLayout并切换回它的Fragment,它不重新创建它保持Fragments,因此它们是不再显示任何东西。这是这样的设计吗,还是我做错了什么?我在NavigationDrawer中使用外部Fragment,当用户切换到另一个Fragment并返回时,选项卡Fragments为空,因为它们不会被重新创建。我还注意到,在切换回含有它们的片段后,Tabs行为真的很奇怪(它们在跳跃下面是白线,并且可以在两个标签之间保持它而不触摸屏幕)的Android TabLayout不重装片段

我正在使用的代码:

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

“我注意到TabLayout只加载碎片” - ['TabLayout'](http://developer.android.com/reference/android/support/design/ widget/TabLayout.html)与片段无关。 'ViewPager'与片段无关。 'LinesTabsAdapter'大概是与片段有关的。 – CommonsWare

+0

setupViewPager中的代码应该加载片段,对吧? – qwertz

+0

我不知道。 AFAIK,你编写了'LinesTabsAdapter',因为Android SDK中没有这样的类。它似乎与碎片有关的唯一原因是您似乎将碎片传入碎片。 – CommonsWare

回答