AndroidNavigation组件:如何在切换底部标签时不销毁Fragment视图?
创始人
2024-10-09 09:30:39
0次

为了在切换底部标签时不销毁Fragment视图,可以使用以下代码。

首先,我们需要在MainActivity中定义NavController,并使用onSaveInstanceState保留当前Fragment的状态。

class MainActivity : AppCompatActivity() {

    private lateinit var navController: NavController

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Initialize NavController
        navController = Navigation.findNavController(this, R.id.nav_host_fragment)

        if (savedInstanceState == null) {
            navController.navigate(R.id.homeFragment)
        }
    }

    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        Navigation.findNavController(this, R.id.nav_host_fragment).let {
            outState.putInt("currentDestinationId", it.currentDestination?.id ?: R.id.homeFragment)
        }
    }

    override fun onRestoreInstanceState(savedInstanceState: Bundle) {
        super.onRestoreInstanceState(savedInstanceState)
        Navigation.findNavController(this, R.id.nav_host_fragment).apply {
            val currentDestinationId = savedInstanceState.getInt("currentDestinationId", R.id.homeFragment)
            if (currentDestination?.id != currentDestinationId) {
                navigate(currentDestinationId)
            }
        }
    }

    override fun onSupportNavigateUp(): Boolean {
        return navController.navigateUp() || super.onSupportNavigateUp()
    }
}

接下来,在Fragment中使用onCreateView和onDestroyView来保存和恢复Fragment视图的状态。

class MyFragment : Fragment() {

    private var hasViewCreated: Boolean = false

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        val view = inflater.inflate(R.layout.fragment_my, container, false)
        if (!hasViewCreated) {
            // Do initialization here
            hasViewCreated = true
        } else {
            // Restore state here
        }
        return view
    }

    override fun onDestroyView() {
        super.onDestroyView()
        hasViewCreated = false
    }

}

当Fragment视图被创建时,我们进行初始化。当Fragment被销毁并重新创建时,我们将恢复保存的状态。在每个Fragment中使用这些代码来存储和恢复Fragment视图状态,就可以在切换底部标签时不销毁Fragment视图了。

相关内容

热门资讯

分享开挂内幕!南通快胡麻将辅助... 分享开挂内幕!南通快胡麻将辅助脚本软件,南通快胡麻将确实是真的有辅助揭幕神器在进入南通快胡麻将软件靠...
推荐一款!泸州大贰麻将透视挂脚... 推荐一款!泸州大贰麻将透视挂脚本软件,泸州大贰麻将真是有透视挂教你工具1.泸州大贰麻将 选牌创建新账...
盘点一款!扬州麻将辅助脚本软件... 盘点一款!扬州麻将辅助脚本软件,扬州麻将一直是真的有辅助有挂脚本1)扬州麻将有没有挂:进一步探索扬州...
重大推荐!云上麻将辅助器脚本软... 重大推荐!云上麻将辅助器脚本软件,云上麻将一直真的有辅助器了解攻略小薇(辅助器软件下载)致您一封信;...
推荐一款!聚乐惠开挂脚本软件,... 推荐一款!聚乐惠开挂脚本软件,聚乐惠果然存在有开挂揭幕工具1、进入到聚乐惠是否有挂之后,能看到左侧胜...
玩家交流!天涯麻将辅助器脚本软... 玩家交流!天涯麻将辅助器脚本软件,天涯麻将一贯是真的有辅助器总结方法1、实时天涯麻将透视辅助更新:用...
新手必备!好友赣南辅助器脚本软... 新手必备!好友赣南辅助器脚本软件,好友赣南其实存在有辅助器了解工具1、很好的工具软件,可以解锁游戏的...
专业讨论!悠闲坦克辅助器脚本软... 专业讨论!悠闲坦克辅助器脚本软件,悠闲坦克好像存在有辅助器必备技巧1、悠闲坦克透视辅助软件激活码多个...
来一盘!微乐四川麻将移动版透视... 来一盘!微乐四川麻将移动版透视挂脚本软件,微乐四川麻将移动版总是是有透视挂教你app1、许多玩家不知...
玩家必备攻略!奥云集安麻将开挂... 玩家必备攻略!奥云集安麻将开挂脚本软件,奥云集安麻将都是是有开挂分享工具1、金币登录送、破产送、升级...