Я использую навигационный ящик в своем проекте с 5 фрагментами в нем. В одном фрагменте у меня есть библиотека поддержки дизайна, представленная TabLayout, которая включает в себя 2 фрагмента. Все работает нормально, за исключением случаев, когда я оставляю фрагмент, который имеет TabLayout, и переключается обратно на него, весь контент ушел.Android TabLayout больше не отображает содержимое, как только фрагмент переключается
В каждом фрагменте TabLayout у меня есть SwipeRefreshLayout с ListView в нем, они оба ничего не отображают при переключении.
Я также заметил, что TabLayout начинает действовать странно. по странному я имею в виду, что белый индикатор начинает прыгать, вы можете удерживать его еще посредине двух вкладок ...
Так что мне не хватает чего-то, что TabLayout действует так странно?
Код здесь: Фрагмент, который содержит TabLayout:
public class MainFragment extends Fragment {
private static String locale;
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.MyStyle);
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 Fragment1(), "Fragment 1");
adapter.addFragment(new Fragment2(), "Fragment2");
viewPager.setAdapter(adapter);
}
public static class Fragment extends Fragment {
private static List<RowItems1> rowItems;
private static ListView listview;
private static Adapter1 adapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity1, container, false);
listview = (ListView) view.findViewById(R.id.listview1);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
updateInfo(true);
}
public static void updateInfo() {
rowItems = new ArrayList<>();
adapter = new Adapter1(context, rowItems);
listview.setAdapter(adapter);
}
}
public static class Fragment2 extends Fragment {
private static List<RowItems2> rowItems;
private static ListView listview;
private static Adapter1 adapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_lines_all, container, false);
listview = (ListView) view.findViewById(R.id.activity2);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
updateInfo(true);
}
public static void updateInfo() {
rowItems = new ArrayList<>();
adapter = new Adapter2(context, rowItems);
listview.setAdapter(adapter);
}
}
}
Я использую MainFragment как синглтон и заменить содержимое с ним, как только пользователь выбирает его в панели навигации. Когда я переключаюсь на него, все работает нормально, ListView содержит свои данные, SwipeRefreshLayout отлично работает. Когда я переключаюсь на другой фрагмент с помощью навигационного ящика и переключаюсь обратно на этот фрагмент, он ничего не отображает, как описано выше.
EDIT: Есть ли у меня проблемы с этим? Если у кого-то были проблемы, как они это исправили?
спасибо! Ты спас свой день. Я боролся много часов ... –
Его работа для меня. Благодарю. –
Да, это помогло мне, getSupportFragmentManager не работал, но getChildFragmentManager работает отлично. –