java - 如何重新显示和恢复先前添加的片段及其视图到容器
问题描述
在这里,我有将片段加载到容器中的代码(函数)......
public void loadFragment(Fragment targetFragment, int containerId) {
if (!targetFragment.isAdded()) {
Toast.makeText(this, "Adding First Time", Toast.LENGTH_SHORT).show();
supportFragmentManager.beginTransaction().add(containerId, targetFragment,targetFragment.getClass().getName()).commit();
} else {
Toast.makeText(this, "Showing The Privious Instance of Fragment", Toast.LENGTH_SHORT).show();
supportFragmentManager.beginTransaction().attach(supportFragmentManager.findFragmentByTag(targetFragment.getClass().getName())).commit();
}
}
代码的问题if part
是正常工作,如果没有添加片段实例,它只会添加该片段实例,但是当我尝试重新加载该片段时没有任何反应,似乎我在else part
加载先前添加的片段时出错了!
解决方案
代码中的问题: 您忘记在附加之前使用分离方法
在您的代码中:
if (!targetFragment.isAdded()) {
Toast.makeText(this, "Adding First Time", Toast.LENGTH_SHORT).show();
supportFragmentManager.beginTransaction().add(containerId, targetFragment,targetFragment.getClass().getName()).commit();
} else {
Toast.makeText(this, "Showing The Privious Instance of Fragment", Toast.LENGTH_SHORT).show();
supportFragmentManager.beginTransaction()
.detach(supportFragmentManager.findFragmentByTag(targetFragment.getClass().getName()))
.attach(supportFragmentManager.findFragmentByTag(targetFragment.getClass().getName()))
.commit();
}
推荐阅读
- ethereum - 如何创建以太坊销毁地址?
- asp.net - 从 .netcore 2.1 迁移到 3.1 后得到 404
- swift - Ubuntu 20.04 上的 Swift - 每次都需要添加路径
- gql - 是否可以从其他项目中查询“种类”?
- php - 显示 CPT 有多少评论
- android - 从移动 Flutter 到 Web 应用程序的 Firebase Auth 持久性
- r - 使用 for 循环和 if 语句根据另一列的条件填充 R 中的列
- mongodb - 无法在反应中代理请求 ECONNREFUSED
- firebase - 当我尝试通过颤振从firebase检索快照时没有检索到任何东西
- node.js - 为什么我的 typescript 节点模块在安装到我的 Next.js 应用程序时会触发“可能需要适当的加载程序”错误?