Android Kotlin 更換深色模式后activity重建問題解決

主要重寫onSaveInstanceState保存Fragment,切換后進(jìn)行賦值

1.定義四個(gè)Fragment。在切換深色\淺色模式時(shí)會(huì)重新創(chuàng)建內(nèi)存

    private var aFragment:Fragment? = null
    private var bFragment:Fragment? = null
    private var cFragment:Fragment? = null
    private var dFragment:Fragment? = null

2.在onCreate里面進(jìn)行判斷是第一次進(jìn)入還是重新繪制

override fun onCreate(savedInstanceState: Bundle?) {
  。。。
       if(savedInstanceState == null){ // 判斷是否是第一次繪制Activity
            // 設(shè)置默認(rèn)頁面
            replaceZhanTingPageFragment()
            // 更改默認(rèn)頁面的Icon為b頁的對應(yīng)icon
            binding.bottomNavigationView.selectedItemId = binding.bottomNavigationView.menu.getItem(1).itemId

        }else{
            // 如果切換了深色/淺色模式 將之前存放的fragment狀態(tài)賦予新創(chuàng)建的Fragment
            aFragment= supportFragmentManager.getFragment(savedInstanceState,"aFragmentBundle")
            bFragment= supportFragmentManager.getFragment(savedInstanceState,"bFragmentBundle")
            cFragment= supportFragmentManager.getFragment(savedInstanceState,"cFragmentBundle")
            dFragment= supportFragmentManager.getFragment(savedInstanceState,"dFragmentBundle")
        }
        initView()
  。。。
}

3.每次繪制都要進(jìn)行賦值按鈕

    private fun initView(){
        binding.bottomNavigationView.setOnItemSelectedListener(NavigationBarView.OnItemSelectedListener { item ->
            val id = item.itemId
            when (id) {
                R.id.a-> replaceA()
                R.id.b-> replaceB()
                R.id.c-> replaceC()
                R.id.d-> replaceD()
            }
            true
        })
    }

4.四個(gè)初始化Fragment頁面。防止重新創(chuàng)建布局重疊

private fun replaceA {
        val transaction = supportFragmentManager.beginTransaction()
        if(aFragment == null){
            aFragment = AFragment()
            transaction.add(R.id.framelayout_container,
                aFragment as AFragment, "aFragment")
        }
        hideFragment(transaction)
        transaction.show(aFragment!!)
        transaction.commit()
    }
private fun replaceB {
        val transaction = supportFragmentManager.beginTransaction()
        if(bFragment == null){
            bFragment = BFragment()
            transaction.add(R.id.framelayout_container,
                bFragment as BFragment, "bFragment")
        }
        hideFragment(transaction)
        transaction.show(bFragment!!)
        transaction.commit()
    }
private fun replaceC {
        val transaction = supportFragmentManager.beginTransaction()
        if(cFragment == null){
            cFragment = CFragment()
            transaction.add(R.id.framelayout_container,
                cFragment as CFragment, "cFragment")
        }
        hideFragment(transaction)
        transaction.show(cFragment!!)
        transaction.commit()
    }
private fun replaceD {
        val transaction = supportFragmentManager.beginTransaction()
        if(dFragment == null){
            dFragment = DFragment()
            transaction.add(R.id.framelayout_container,
                dFragment asDFragment, "dFragment")
        }
        hideFragment(transaction)
        transaction.show(dFragment!!)
        transaction.commit()
    }

5.隱藏所有的fragment

    private fun hideFragment(transaction: FragmentTransaction) {
        if (aFragment != null) {
            transaction.hide(aFragment!!)
        }
        if (bFragment != null) {
            transaction.hide(bFragment!!)
        }
        if (cFragment != null) {
            transaction.hide(cFragment!!)
        }
        if dFragment != null) {
            transaction.hide(dFragment!!)
        }
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容