2017-04-10 2 views
0

Ich habe drei Registerkarten, in einem Tab fordere ich Daten Formular Backend. Wenn Sie diese Registerkarten erneut anklicken, wird es erneut geladen. Ich möchte, wenn ich Fragment neu laden, alle Dinge in listView im Speicher neu laden. Mein Code wie folgt aus:Wie wird das Statusfragment in Tabs nicht neu geladen?

 BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation); 
     navigation.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { 
     @Override 
     public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
      Fragment fragment = null; 
      switch (item.getItemId()) { 
       case R.id.navigation_home: 
        fragment = FirstFragment.newInstance(); 
        break; 
       case R.id.navigation_dashboard: 
        fragment = SecondFragment.newInstance(); 
        break; 
       case R.id.navigation_notifications: 
        fragment = ThreeFragment.newInstance(); 
        break; 
      } 
      if (fragment != null) { 
       FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
       fragmentTransaction.replace(R.id.content, fragment); 
       fragmentTransaction.commit(); 
      } 

      return true; 
     } 
    }); 

Aber wenn ich Symtems.print.out ich sehe Ergebnis: - Tab1 geklickt

I/System.out: onCreate main 
    I/System.out: onAttach 1 
    I/System.out: onCreate 1 
    I/System.out: onCreateView 1 
    I/System.out: onResume main 
    I/System.out: onResume 1 

-Tab2

geklickt
I/System.out: onAttach 2 
I/System.out: onCreate 2 
I/System.out: onDetach 1 
I/System.out: onCreateView 2 
I/System.out: onResume 2 

-Reclick Tab 1:

I/System.out: onAttach 1 
I/System.out: onPause 2 
I/System.out: onDetach 2 
I/System.out: onCreateView 1 
I/System.out: onResume 1 

wh en reclick a tabs alle fragment lifecyle run wieder dafür mein code load backend run wieder. Wie kann ich etwas wie Fragment onPause behalten, wenn andere Tabs klicken und OnResume, wenn es erneut klickt ?.

Antwort

0

Sie müssen diese Zeilen in Ihrem Fragment innerhalb OnCreateView hinzufügen()

Linien

// check if view is null to avoid recreating 
if(rootView != null) { 
    return rootView; 
}else { 
    rootView = inflater.inflate(R.layout.fragment_film,container,false); 
} 
+0

Ich versuche dies, aber rootView immer Null, wenn die Registerkarte "Zurücksetzen". –

0

Oh man hinzufügen, ich habe auf dem Platz einfach gewesen. Was ich getan habe, ich habe BottomNavigationView durch den erweiterten ViewPager ersetzt, der Wischgesten ausgeschaltet hat. Sie können es hier finden: How do disable paging by swiping with finger in ViewPager but still be able to swipe programmatically?

ViewPager hat setOffScreenPageLimit (numberOfPages) -Methode, die gewünschte Menge an Fragmenten von den Seiten des Bildschirms halten, um nicht alle harte Arbeit zu wiederholen.

Verwenden Sie auch einfache TabLayout, um Registerkarten am unteren Rand zu sehen.

Verwandte Themen