7

Ich verwende in meinem Projekt eine Navigationsleiste mit 5 Fragmenten. In einem Fragment habe ich die in der Design-Support-Bibliothek eingeführte TabLayout, die 2 Fragmente enthält. Alles funktioniert gut, außer wenn ich das Fragment, das das TabLayout hat, zurücklasse und zu ihm zurückwechsle, ist der gesamte Inhalt verschwunden.Android TabLayout zeigt Inhalte nicht mehr an, sobald das Fragment umgeschaltet wird

In jedem Fragment in der TabLayout habe ich eine SwipeRefreshLayout mit einer ListView drin, beide zeigen nichts beim Wechsel an.

Ich bemerkte auch, dass das TabLayout beginnt, sich seltsam zu verhalten. von komisch Ich meine der weiße Indikator beginnt zu springen, können Sie es immer noch in der Mitte der beiden Tab ...

So vermisse ich etwas, dass die TabLayout so seltsam wirkt?

Der Code hier: Fragment, das das TabLayout enthält:

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

ich die MainFragment als Singleton verwenden und den Inhalt mit ihm zu ersetzen, sobald der Benutzer sich in der Navigationsleiste auswählt. Wenn ich dazu wechsle, funktioniert alles gut, das ListView enthält seine Daten, das SwipeRefreshLayout funktioniert einwandfrei. Wenn ich mit der Navigationsleiste zu einem anderen Fragment wechsle und zu diesem Fragment zurückwechsle, wird nichts angezeigt, wie oben beschrieben.

EDIT: Bin ich der Einzige, der Probleme damit hat? Wenn jemand Probleme hatte, wie haben sie es behoben?

Antwort

16

Wenn ich ViewPager und zurück verwendet habe, hatte ich leere Fragmente bis zum Wechsel, wenn ich getSupportFragmentManager verwendet.

Versuchen Sie zu verwenden: getChildFragmentManager.

+2

Vielen Dank !! Du hast meinen Tag gerettet. Ich habe viele Stunden gekämpft ... –

+0

Es funktioniert für mich. Vielen Dank. –

+0

Ja, das hat mir geholfen, getSupportFragmentManager hat nicht funktioniert, aber getChildFragmentManager funktioniert einwandfrei. –