2017-03-17 3 views
2

Früher dieser Code funktionierte, aber es jetzt plötzlich funktioniert nicht mehr. Das Fragment löst sich nicht von der Elternaktivität.Refresh ein Fragment Android

public void reLoadFragment(Fragment fragment) 
{ 
    Log.i(LogGeneratorHelper.INFO_TAG, "reloading fragment"); 
    // Reload current fragment 
    Fragment frg = null; 
    frg = getSupportFragmentManager().findFragmentByTag(fragment.getClass().getName()); 
    frg.onDetach(); 
    final FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    ft.detach(frg); 
    ft.attach(frg); 
    ft.commit(); 
    Log.i(LogGeneratorHelper.INFO_TAG, "reloading fragment finish"); 
} 

Antwort

1

verwenden in yout Hauptaktivität:

frag_name frag_name = new frag_name(); 
        FragmentManager manager = this.getSupportFragmentManager(); 
        manager.beginTransaction().replace(R.id.youtframelayout, frag_name, frag_name.getTag()).commit(); 

Es inicializes die fragment und ersetzt es in Ihrem FrameLayout

Wie dies Ihr wieder das Fragment zu ersetzen :)

es Hoffnung funktioniert! :)

+1

Dank, ich machte es wie folgt arbeiten. ft. detach() funktioniert nicht nach dem Update der Support-Bibliothek 25.1.0. Diese Lösung funktioniert nach der Aktualisierung einwandfrei: getSupportFragmentManager() .beginTransaction() .detach (oldFragment) .commitNowAllowingStateLoss(); getSupportFragmentManager() .beginTransaction() .attach (oldFragment) .commitAllowingStateLoss(); –

+0

arbeitet grüßen. Knospe – user3707644

0

Sie können einfach das aktuelle Fragment aktualisieren mit

FragmentTransaction ft = getFragmentManager().beginTransaction(); 
ft.detach(this).attach(this).commit(); 

Auch in Ihrem Fall, dass Sie etwas tun können,

public void reLoadFragment(Fragment fragment) 
{ 
    Log.i(LogGeneratorHelper.INFO_TAG, "reloading fragment"); 
    Fragment currentFragment = fragment; 
    if (currentFragment instanceof "FRAGMENT CLASS NAME") { 
     FragmentTransaction fragTransaction = (getActivity()).getFragmentManager().beginTransaction(); 
     fragTransaction.detach(currentFragment); 
     fragTransaction.attach(currentFragment); 
     fragTransaction.commit(); 
     Log.i(LogGeneratorHelper.INFO_TAG, "reloading fragment finish"); 
    } 
    else Log.i(LogGeneratorHelper.INFO_TAG, "fragment reloading failed"); 
} 
1

ft.detach() funktioniert nicht nach Support-Bibliothek Update 25.1.0 . Diese Lösung funktioniert nach dem Update:

getSupportFragmentManager().beginTransaction().detach(oldFragment).commitNowAllowingStateLoss(); 
getSupportFragmentManager().beginTransaction().attach(oldFragment).commitAllowingStateLoss(); 

Credit: Refresh or force redraw the fragment