此前此代码正在运行,但现在它突然停止工作了。片段不会与父活动分离。
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");
}
答案 0 :(得分:4)
ft.detach()
无效。更新后此解决方案正常工作:
getSupportFragmentManager().beginTransaction().detach(oldFragment).commitNowAllowingStateLoss();
getSupportFragmentManager().beginTransaction().attach(oldFragment).commitAllowingStateLoss();
答案 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()