用自己替换片段不会显示任何内容
我试图决定并在活动的onResume方法中显示片段,但是如果再次选择先前添加的片段,则活动将变为空白。
示例代码(带有一个片段):
@Override
protected void onResume(){
FragmentTransaction trans = getSupportFragmentManager().beginTransaction();
trans.replace(R.id.myLayout, fragA);
trans.commit();
getSupportFragmentManager().executePendingTransactions();
}
使用上面的代码,当第一次创建活动时,它会正确显示fragA ,但如果我按Home键然后切换回我的活动(为了再次激发onResume ),它全部变为空白(看起来像fragA已移除)。
替换以前添加的片段是否会自行删除? 或者如果它被替换为自己,怎么不松散一个片段?
你不能用自己替换一个片段。 替换的前半部分是删除该ID处的前一个片段。 一旦片段被移除,片段管理器就不能再添加或使用该片段(所以替换的添加部分将无法正常工作)。
根据您的使用情况,您有两种选择:
最后,你可能不需要调用executePendingTransactions。
你可以试试:
if( !(getSupportFragmentManager().findFragmentById(R.id.myLayout) instanceof FragmentA) ) {
FragmentTransaction trans = getSupportFragmentManager().beginTransaction();
trans.replace(R.id.myLayout, fragA);
trans.commit();
}
我假设fragA是FragmentA类对象。
最后,我必须在更换碎片之前进行检查。 如果请求(已添加)片段再次替换,我必须检查它是否已经添加,然后忽略替换,否则继续。 例如:
@Override
protected void onResume() {
if (!fragA.isAdded()) {
FragmentTransaction trans = getSupportFragmentManager().beginTransaction();
trans.replace(R.id.myLayout, fragA);
trans.commit();
//getSupportFragmentManager().executePendingTransactions(); //unnecessary
}
}
链接地址: http://www.djcxy.com/p/81409.html
上一篇: Replacing a Fragment with itself does not show anything