刷新片段android

时间:2017-03-17 10:52:40

标签: android android-fragments

此前此代码正在运行,但现在它突然停止工作了。片段不会与父活动分离。

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");
}

6 个答案:

答案 0 :(得分:4)

支持库更新25.1.0后,

ft.detach()无效。更新后此解决方案正常工作:

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

信用: Refresh or force redraw the fragment

答案 1 :(得分:2)

您只需使用

刷新当前片段即可
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");
}

答案 2 :(得分:1)

在主要活动中使用此功能:

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

它会fragment使用FrameLayout并将其替换为// Private function to divide field values together function _divideFields(product, fields) { // Calculate our total var total = fields.reduce(function (total, field) { // Get our number from our field var fieldValue = helper.getPropertyValue(product, field.trim()), number = _extractNumber(fieldValue); return total ? total / number : number; }, 0); // Return our total return total; };

像这样你再次替换片段:)

希望它有效! :)

答案 3 :(得分:1)

对于Kotlin,请使用以下代码。

 fragmentManager!!.beginTransaction().detach(this).attach(this).commit()

答案 4 :(得分:0)

这将刷新当前片段:

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

答案 5 :(得分:0)

对于Kotlin:

supportFragmentManager.beginTransaction().detach(fragment).attach(fragment).commit()