Android Fragment重叠,车机Fragment重叠 换肤或后台重启后重叠问题;

之前写过了一篇关于Fragment重叠的问题,

Fragment重叠,使用show和hide控制显示和隐藏界面重叠问题

但这次在车机上遇到了一个Fragment重叠的问题,以上的几种方法都解决不了,所以来记录一下;

该车机在切换到后台后会回调 onSaveInstanceState 方法,再次打开时没有走onCreate方法,所以在onSaveInstanceState方法中把当前显示的fragment删除后,从后台切换回来就是空白页了;

车机在换肤后(切换黑夜和白天模式)会回调 onSaveInstanceState 和 onCreate 方法,所以就从onCreate方法下手,下面是代码

java 复制代码
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if(savedInstanceState != null){
            hideFragment();
        }
        setContentView(R.layout.activity_main);

    }



    private void hideFragment() {
        FragmentManager supportFragmentManager = getSupportFragmentManager();
        F1Fragment f1 = (F1Fragment) supportFragmentManager.findFragmentByTag(F1Fragment.class.getName());
        F2Fragment f2 =  (F2Fragment) supportFragmentManager.findFragmentByTag(F2Fragment.class.getName());
        F3Fragment f3 = (F3Fragment) supportFragmentManager.findFragmentByTag(F3Fragment.class.getName());
        F4Fragment f4 = (F4Fragment) supportFragmentManager.findFragmentByTag(F4Fragment.class.getName());
        FragmentTransaction transaction = supportFragmentManager.beginTransaction();
        if (f1!=null) transaction.hide(f1);
        if (f2!=null) transaction.hide(f2);
        if (f3!=null) transaction.hide(f3);
        if (f4!=null) transaction.hide(f4);
        transaction.commit();
    }

然后在 add Fragment时设置Tag就可以了;

java 复制代码
 transaction.add(R.id.fl, targetFragment ,targetFragment.getClass().getName()).commit();

根据Tag获取Activity销毁前的Fragment,并做处理。这样在Activity重启后会判断之前保存的是否有Fragment,有的话就把之前的隐藏就可以了;

相关推荐
e***193520 小时前
MySQL-mysql zip安装包配置教程
android·mysql·adb
方白羽20 小时前
Kotlin遇上Java 静态方法
android·java·kotlin
q***064721 小时前
SpringSecurity相关jar包的介绍
android·前端·后端
7***31881 天前
若依微服务中配置 MySQL + DM 多数据源
android·mysql·微服务
我是好小孩1 天前
【Android】常见的架构模式:MVC, MCP, MVVM
android·架构·mvc
Digitally1 天前
如何通过蓝牙将联系人从 iPhone 传输到 Android
android·ios·iphone
embrace991 天前
【C语言学习】结构体详解
android·c语言·开发语言·数据结构·学习·算法·青少年编程
用户69371750013841 天前
11.Kotlin 类:继承控制的关键 ——final 与 open 修饰符
android·后端·kotlin
用户0273851840261 天前
【Android】LiveData的使用以及源码浅析
android·程序员
用户69371750013841 天前
10.Kotlin 类:延迟初始化:lateinit 与 by lazy 的对决
android·后端·kotlin