0

Ich habe versucht, den Titel so gut wie möglich zu formulieren, aber im Grunde habe ich in der HomeActivity ein benutzerdefiniertes Menü mit einem Haufen für Fragmente.! Einer der sie ist HomeFragment, die eine Tablelayout von 2 Tabs mit einem viewpager enthält ..!Viewpager funktioniert nicht, wenn ich von einer Werkzeugleiste zurück drücke

Alles funktioniert richtig.! Wenn jedoch innerhalb des Menüfragments der Benutzer auf die Zurück-Schaltfläche in der Symbolleiste klickt, kehrt er zu HomeFragment zurück. Eine Fragment-Ersetzung-Methode wird den Trick, den ich bereits verwendet habe, um zwischen den Fragmenten zu ersetzen, wenn Sie aus dem Menü wählen!

Aber in diesem Fall öffnet die HomeFragment noch die Tablayout reagiert nicht! es fühlt sich an wie das Fragment nicht richtig erstellt wurde !?

Ich habe versucht, eine neue Absicht der gleichen Aktivität, die HomeFragment standardmäßig öffnet, und es öffnet es aber mit dem gleichen Problem ..!


Das Problem

enter image description here


Der Kodex

HomeFragment

// code.. 

    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, 
     Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.fragment_home, container, false); 
    InitViews(rootView); 

    TabLayoutAdapter adapter = new TabLayoutAdapter(getFragmentManager()); 
    pager.setAdapter(adapter); 
    tabLayout.setupWithViewPager(pager); 


    return rootView; 
    } 

// code.. 

Menü Fragment

// code.. 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.to_home: 

    replaceFragment(new HomeFragment()); 

     // tried this and it's the same problem 
     // startActivity(new Intent(getActivity(), HomeActivity.class).setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY)); 
     return true; 
     default: 
     return super.onOptionsItemSelected(item); 
    } 
    } 

    public void replaceFragment(Fragment fragment) { 
    android.support.v4.app.FragmentTransaction t = getFragmentManager().beginTransaction(); 
    t.replace(R.id.Container, fragment); 
    t.commit(); 
    } 

    // code.. 

Antwort

2

auf den Code der Suche Ich glaube, Sie getChildFragmentManager() anstelle von getFragmentManager() und verwenden es für Fragment Transaktion verwenden.

Die Definition von getChildFragmentManager() lautet: Geben Sie einen privaten FragmentManager zurück, um Fragmente innerhalb dieses Fragments zu platzieren und zu verwalten.

Und die Definition von getFragmentManager() ist: Geben Sie den FragmentManager für die Interaktion mit Fragmenten zurück, die mit der Aktivität dieses Fragments verknüpft sind.

Ersetzen Sie diese Codezeile getFragmentManager() von getChildFragmentManager()

TabLayoutAdapter adapter = new TabLayoutAdapter(getChildFragmentManager()); 

Auch im Menü Fragment

android.support.v4.app.FragmentTransaction t = getChildFragmentManager().beginTransaction(); 
+0

es mir mit gibt's java.lang.IllegalArgumentException: Keine Aussicht für id gefunden 0x7f0d008a (XXX.XXXX: id/Container) für das Fragment GamesFragment {2b77c84 # 2 id = 0x7f0d008a} ' –

+0

Wo ist das GamesFragment? – Anonymous

+0

Es ist das Menü Fragment ..! Es ist Code in der Frage geschrieben! Warum denkst du, dass dieser Fehler sich zeigt?!? –

Verwandte Themen