2017-03-17 18 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(); 

それはfragmentをinicializesし​​、このようにあなたが再びフラグメントを交換し、あなたのFrameLayout

でそれを置き換える:)

がそれを願っています作品! :)

+1

おかげで、私はそれがこのように動作しました。 サポートライブラリの更新後にft.detach()が機能しません25.1.0。このソリューションは、アップデート後に正常に動作します。 getSupportFragmentManager() .beginTransaction() .detach(oldFragment) .commitNowAllowingStateLoss(); getSupportFragmentManager() .beginTransaction() .attach(oldFragment) .commitAllowingStateLoss(); –

+0

作品は挨拶します。 tnxの芽 – user3707644

0

あなたは、単にあなたがこのような何かを行うことができ、あなたのケースで、

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の後に動作していない、また

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

を使用して、現在のフラグメントをリフレッシュすることができます。このソリューションは、更新後に正常に動作します:

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

クレジット: Refresh or force redraw the fragment

関連する問題