7

Я использую навигационный ящик в своем проекте с 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: Есть ли у меня проблемы с этим? Если у кого-то были проблемы, как они это исправили?

ответ

16

Когда я использовал viewPager и обратно на нем, у меня были пустые фрагменты до тех пор, пока я не использовал getSupportFragmentManager.

Попробуйте использовать: getChildFragmentManager.

+2

спасибо! Ты спас свой день. Я боролся много часов ... –

+0

Его работа для меня. Благодарю. –

+0

Да, это помогло мне, getSupportFragmentManager не работал, но getChildFragmentManager работает отлично. –