FragmantClass rSum = new FragmantClass();
getSupportFragmentManager().beginTransaction().remove(rSum).commit();
Run Code Online (Sandbox Code Playgroud)
我正在尝试删除此片段,当我加载切换另一个片段.上述片段不会被删除.这是我打电话切换片段的方法.
public void switchContent(Fragment fragment) {
FragmantClass rSum = new FragmantClass();
getSupportFragmentManager().beginTransaction().remove(rSum).commit();
mContent = fragment;
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.content_frame, fragment)
.commit();
getSlidingMenu().showContent();
}
Run Code Online (Sandbox Code Playgroud)
Tha*_*var 49
getSupportFragmentManager().beginTransaction().
remove(getSupportFragmentManager().findFragmentById(R.id.frame)).commit();
Run Code Online (Sandbox Code Playgroud)
试试这个,它应该工作.
public void switchContent(Fragment fragment) {
getSupportFragmentManager().beginTransaction().
remove(getSupportFragmentManager().findFragmentById(R.id.frame)).commit();
mContent = fragment;
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.content_frame, fragment)
.commit();
getSlidingMenu().showContent();
}
Run Code Online (Sandbox Code Playgroud)
Moi*_*llo 13
在我个人的情况下,我这样添加和删除片段:
if(getSupportFragmentManager().findFragmentById(R.id.container) != null) {
getSupportFragmentManager()
.beginTransaction().
remove(getSupportFragmentManager().findFragmentById(R.id.container)).commit();
}
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.container, fragment)
.commit();
Run Code Online (Sandbox Code Playgroud)
总是很好验证您的容器是否具有片段或具有空异常
cra*_*ned 10
这是一个非常简单的解决方案SupportFragmentManager
.FragmentManager
不太方便,但仍然有效:
List<Fragment> fragmentList = getSupportFragmentManager().getFragments();
// You might have to access all the fragments by their tag,
// in which case just follow the line below to remove the fragment
if (fragmentList == null) {
// code that handles no existing fragments
}
for (Fragment frag : fragmentList )
{
// To save any of the fragments, add this check
// a tag can be added as a third parameter to the fragment when you commit it
if (frag.getTag().equals("<tag-name")) {
continue;
}
getSupportFragmentManager().beginTransaction().remove(frag).commit();
}
Run Code Online (Sandbox Code Playgroud)
或者,如果你被迫使用它(但不推荐):
.commitAllowingStateLoss();
Run Code Online (Sandbox Code Playgroud)
如果要多次从视图中删除所有片段,可以考虑检查当前的片段是否为空isDetached()
或者isRemoving()
或者是否可以获得NullPointerExceptions
.
更新6-9-15:现在getSupportFragmentManger().getFragments()
显然隐藏了文档,但在我的代码中仍然可以正常工作.这是文档的屏幕截图:
更新8-3-15:如果您没有使用支持库来获取片段,很遗憾没有getFragments()
可用的,但仍有一些更不方便的选项.
fragment
一个tag
或id
创建时,并遍历它们来处理每个fragment
任意的.onAttachListener
,每次fragment
附加一个新的activity
,你可以存储它fragment
,然后遍历该数据结构,fragment
根据需要处理每个.当不使用getSupportFragmentManager()
,处理交易时,您需要使用getFragmentManager()
.
归档时间: |
|
查看次数: |
70626 次 |
最近记录: |