Navigation问题详解——Fragment创建新的实例

栏目: IOS · Android · 发布时间: 6年前

内容简介:周末,有位同学在微信公共号后台,给我留言,说看了我之前写两篇文章,每次进入下一个Fragment不管任务栈里是否存在该Fragment的实例,都会创建一个新的实例而不会复用。为了说明问题,我录了一个GIF

周末,有位同学在微信公共号后台,给我留言,说看了我之前写两篇文章, 谷歌官方组件Navigation你了解了吗?谷歌官方组件Navigation你会用了吗? 之后,也在尝试使用Navigation,但是使用的过程当中遇到了问题:

每次进入下一个Fragment不管任务栈里是否存在该Fragment的实例,都会创建一个新的实例而不会复用。

为了说明问题,我录了一个GIF

Navigation问题详解——Fragment创建新的实例

这样就会出现一个问题,可能我们之前的OneFragment保存一些状态或者数据,当我们跳转OneFragment的时候,因为创建新的实例导致我们之前保存状态或者数据全部消失。

popUpTo/popUpToInclusive

在action当中设置两个属性

app:popUpTo="@id/oneFragment"
   app:popUpToInclusive="true"
复制代码

我们可以实现如下的效果:

Navigation问题详解——Fragment创建新的实例

注意如果要实现以上效果我们应该注意一下几个地方:

1.如果我们用Kotlin语言,那么我们在gradle当中引用的地方的类库,需要改成

implementation "android.arch.navigation:navigation-fragment-ktx:$nav_version" // use -ktx for Kotlin
 implementation "android.arch.navigation:navigation-ui-ktx:$nav_version" // use -ktx for Kotlin
复制代码

2.这样我们在Fragment当中调用的方法为:

findNavController().navigate(R.id.action_oneFragment_to_twoFragment)
复制代码

注意这里,引用的findNavController包为:

import androidx.navigation.fragment.findNavController
复制代码

3.resource id替换为action id 看过我之前代码的同学,可能会注意到我特意强调

findNavController().navigate(R.id.action_oneFragment_to_twoFragment)
复制代码

这里的id最好用action id,这一种可以配合着action里的动画使用,当然也可以配合着action里的属性popUpTo popUpToInclusive来使用。

之前有位同学在公共号给我留言,问下了Demo之后,为什么设置 popUpTo/popUpToInclusive不起作用,问题就在这里应该是action Id

代码我已经更新,欢迎star和下载。如有问题欢迎给我留言!


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

顾客要买什么

顾客要买什么

[美]迈克尔·西尔 / 方海萍 / 中国人民大学出版社 / 2006-10 / 38.00元

《顾客要买什么》告诉我们全球的中产阶级如何正在改造着消费品市场:对低价的产品和服务进行趋低消费,对于高端的产品和服务要趋优消费,而对于日趋乏味、价值降低的中档商品则避而远之。这些消费者大多是女性,教育程度高,可支配收入多,买东西的时候也更会精打细算。她们选购、使用商品和服务的时候都是有目的的,有一种大权在握的感觉。消费对她们来说并不是非做不可的麻烦事,也不是什么无法避免的琐事,而是如何明智地花钱的......一起来看看 《顾客要买什么》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具