我注意到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);
}
}
“我注意到TabLayout只加载碎片” - ['TabLayout'](http://developer.android.com/reference/android/support/design/ widget/TabLayout.html)与片段无关。 'ViewPager'与片段无关。 'LinesTabsAdapter'大概是与片段有关的。 – CommonsWare
setupViewPager中的代码应该加载片段,对吧? – qwertz
我不知道。 AFAIK,你编写了'LinesTabsAdapter',因为Android SDK中没有这样的类。它似乎与碎片有关的唯一原因是您似乎将碎片传入碎片。 – CommonsWare