【android】fragment重叠的解决
程序员文章站
2022-04-10 09:49:20
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar...
关于fragment重叠的解决在网上已有许多资料,但是因为项目里给的框架的代码是在MainActivity里就把fragment初始化了,我也懒得大幅度去修改,这里来说一下我投机取巧的做法:
用一个成员变量isDetory记录是否被activity被摧毁了
if (savedInstanceState != null&&mContent==null)
{
isDestory=true
}
这里是我切换fragment的代码,第一个参数是fragment,第二个是fragment的名字,第三个FrameLayout的id。
实际上就是用hashmap,保存他们的信息,避免重复add,mContent保存当前的fragment,mContent为空时就直接add不用hide。
当我们知道activity被摧毁了,isDestory为true,用户点击了别的tab标签,我们就直接replace它,将信息保存到hashmap,isDestory变为false。
fun switchFragment(fragment: Fragment?, simpleName: String, id: Int) {
val manager = supportFragmentManager
val mTransaction = manager.beginTransaction()
if (fragment == null) {
return
}
if (isDestory==true){
fragments.put(simpleName, simpleName)
mTransaction.replace(id, fragment, simpleName)
isDestory==false
}else{
if (mContent == null) {
fragments.put(simpleName, simpleName)
mTransaction.add(id, fragment, simpleName)
} else {
if (fragments.containsKey(simpleName)) {
mTransaction.hide(mContent!!).show(fragment)
} else {
fragments.put(simpleName, simpleName)
mTransaction.hide(mContent!!).add(id, fragment, simpleName)
}
}}
mContent = fragment
mTransaction.commitAllowingStateLoss()
}
屁话说了这么多,其实就是用了replace而已,我却走了许多弯路,看来得认真了解每一行代码的意思。
本文地址:https://blog.csdn.net/ophlia_qer/article/details/107468755
推荐阅读
-
Android Studio虚拟机启动的解决办法
-
Android中使用pull解析器操作xml文件的解决办法
-
基于将Android工程做成jar包和资源文件的解决方法
-
Android中使用Toast.cancel()方法优化toast内容显示的解决方法
-
Android4.4下MediaProvider无法向外置SD卡中文件写数据的解决方法
-
Android编程中聊天页面背景图片、标题栏由于键盘引起问题的解决方法
-
关于Android中点击通知栏的通知启动Activity问题解决
-
android调用原生图片裁剪后图片尺寸缩放的解决方法
-
Android 中解决Viewpage调用notifyDataSetChanged()时界面无刷新的问题
-
Android:Field can be converted to a local varible.的解决办法