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视图了。

相关内容

热门资讯

五分钟教程!天涯麻将有脚本吗,... 五分钟教程!天涯麻将有脚本吗,微扑克app发牌规律(详细透视辅助app教程)准备好在天涯麻将有脚本吗...
1分钟辅助挂!情怀麻将,智星德... 1分钟辅助挂!情怀麻将,智星德州辅助(详细透视辅助app教程);原来确实真的有挂(需添加指定薇757...
七分钟方法!八闽十三张十三水有... 七分钟方法!八闽十三张十三水有外挂吗,wpk透视辅助可测试真的(详细透视辅助神器教程);亲真的是有正...
3分钟技巧!丽水都莱有辅助吗,... 3分钟技巧!丽水都莱有辅助吗,德州全自动辅助(详细透视辅助软件教程);精心打造了俱乐部社区互动功能,...
四分钟技巧!闲玩随机暗宝有规律... 自定义闲玩随机暗宝有规律吗系统规律,只需要输入自己想要的开挂功能,一键便可以生成出微扑克专用辅助器,...
9分钟黑科技!聚乐麻将有挂吗,... 《聚乐麻将有挂吗软件透明挂》是一款多人竞技的聚乐麻将有挂吗辅助透视游戏,你将微扑克对手来到同一个战场...
5分钟详情!随意玩科技真的假的... 1、5分钟详情!随意玩科技真的假的,德扑之星实战(详细透视辅助工具教程);该软件可以轻松地帮助玩家将...
两分钟技巧!大宝麻将辅牌器是什... 两分钟技巧!大宝麻将辅牌器是什么,微扑克ai辅助工具(详细透视辅助黑科技教程);亲真的是有正版授权,...
8分钟了解!南通长牌有外挂吗,... 8分钟了解!南通长牌有外挂吗,wpk真的有挂(详细透视辅助软件教程);实战中需综合运用上述技巧,并根...
八分钟教程!闲来玩十三水辅助器... 八分钟教程!闲来玩十三水辅助器有挂吗,poker辅助工具(详细透视辅助助手教程)是一款可以让一直输的...