Ali*_*lli 33 android android-fragments
有没有办法删除已添加特定视图及其视图ID的所有片段?
例如,我想删除添加了R.id.fragmentcontainer视图的所有片段.
谢谢,
小智 49
它非常简单,只需循环遍历所有碎片并将其移除
for (Fragment fragment : getSupportFragmentManager().getFragments()) {
getSupportFragmentManager().beginTransaction().remove(fragment).commit();
}
Run Code Online (Sandbox Code Playgroud)
但是如果导航抽屉一定要检查它,如果你试图删除它,你会收到错误.
for (Fragment fragment : getSupportFragmentManager().getFragments()) {
if (fragment instanceof NavigationDrawerFragment) {
continue;
}
else {
getSupportFragmentManager().beginTransaction().remove(fragment).commit();
}
}
Run Code Online (Sandbox Code Playgroud)
最后但非常重要的是确保在执行任何片段事务之前检查null
for (Fragment fragment : getSupportFragmentManager().getFragments()) {
if (fragment instanceof NavigationDrawerFragment) {
continue;
}
else if (fragment != null) {
getSupportFragmentManager().beginTransaction().remove(fragment).commit();
}
}
Run Code Online (Sandbox Code Playgroud)
Rhn*_*ani 38
你可以尝试下面的代码
getSupportFragmentManager().beginTransaction().remove(frag).commit();
Run Code Online (Sandbox Code Playgroud)
*frag是要删除的片段的对象.
OR
getFragmentManager().beginTransaction().remove(getFragmentManager().findFragmentById(R.id.your_container)).commit();
Run Code Online (Sandbox Code Playgroud)
它将删除在"your_container"容器中编码的片段.
HapPy编码.
Dev*_*ath 10
如果有人在 Kotlin 中寻找代码:
private fun clearFragmentsFromContainer() {
val fragments = supportFragmentManager.fragments
if (fragments != null) {
for (fragment in fragments) {
supportFragmentManager.beginTransaction().remove(fragment).commit()
}
}
//Remove all the previous fragments in back stack
supportFragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE)
}
Run Code Online (Sandbox Code Playgroud)
小智 7
这确实非常简单.
private static void removeAllFragments(FragmentManager fragmentManager) {
while (fragmentManager.getBackStackEntryCount() > 0) {
fragmentManager.popBackStackImmediate();
}
}
Run Code Online (Sandbox Code Playgroud)
更优化的版本
不需要多次调用提交,所以让我们在最后调用一次
supportFragmentManager.fragments.let {
if (it.isNotEmpty()) {
supportFragmentManager.beginTransaction().apply {
for (fragment in it) {
remove(fragment)
}
commit()
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
61676 次 |
| 最近记录: |