2017-03-17 99 views
2

此代碼早些時候工作,但現在它突然停止工作。片段不會從父項活動中分離出來。刷新一個片段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"); 
} 

回答

1

使用這YOUT主要活動:

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

它inicializes的fragment並在FrameLayout

你這樣的替換再片段:)

希望它可以替代它作品! :)

+1

感謝,我做到了這樣的工作。 ft.detach()在支持庫更新25.1.0後無法工作。此解決方案在更新後正常工作: getSupportFragmentManager() .beginTransaction() .detach(oldFragment) .commitNowAllowingStateLoss(); (); getSupportFragmentManager() .beginTransaction() .attach(oldFragment) .commitAllowingStateLoss(); –

+0

工作問候。 TNX芽 – user3707644

0

你可以簡單地使用刷新

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

而且,你的情況,你可以做這樣的事情

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()支持庫更新25.1.0後不工作。該解決方案更新後正常工作:

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

信用: Refresh or force redraw the fragment