导航组件防止在后按时重新创建片段

2024-01-24

我在项目中使用 Jetpack 导航组件,其中包含单个活动和一些片段。

我有一个带有从服务器端填充的列表的片段。我打电话getDataFromServer on the onViewCreated然后,当用户单击某个项目时,会显示一个新片段。

问题是当我按下后退按钮时,onViewCreated在我的列表片段中再次被调用。

那么,如何防止我的第一个片段再次重新创建呢?我不想要不必要的onViewCreated calls.


当然,我们无法阻止调用oncrateView,但是有一个简单的方法。 我们可以在初始化 ViewModel 时调用它,而不是在 onCreateView 或其他生命周期方法中调用 view.loadData()

这篇文章帮助我更好地了解 ViewModel使用架构组件时的 5 个常见错误 https://proandroiddev.com/5-common-mistakes-when-using-architecture-components-403e9899f4cb

Update:

当前的导航组件(V 2.3.0)不支持此功能,它总是在导航到另一个片段时杀死该片段。想象一下,您在片段 A 中有谷歌地图,因此每次您返回片段时,它都会再次初始化,并且相机会移动到用户位置! (真是个坏主意)。

因此,如果您遇到同样的问题,最好的方法是不要使用导航组件。

导航、保存片段状态、GitHub 问题 https://github.com/android/architecture-components-samples/issues/530

更新2:

在某些情况下,例如过滤器或分页,我们可以在 ViewModel 中使用诸如 switchMap 之类的转换,而不是在 init 函数中获取数据。

更新3:

如果您必须调用函数来从源加载数据,有很多方法可以防止再次调用该函数,第一个也是最简单的方法是不要在视图中调用 getData() ,而是在 ViewModel init 函数中调用它。第二种是使用惰性变量,另一种是在 livedata 上使用 SwitchMap。欲了解更多信息,您可以找到所有解决方案here https://proandroiddev.com/when-to-load-data-in-viewmodels-ad9616940da7

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

导航组件防止在后按时重新创建片段 的相关文章

  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没
  • ngmodel与Angular2中复选框的动态数组绑定

    我有一个 Angular 2 组件 其中我从数组生成复选框列表 现在我需要根据选中的复选框填充不同的数组 这应该是双向绑定 这意味着如果复选框的值已在数组中 则必须已经检查了复选框 我在 Angular 1 中使用了一个名为 checkli
  • 闪亮井板宽度

    library shiny library shinydashboard ui lt dashboardPage dashboardHeader dashboardSidebar dashboardBody wellPanel tags d
  • 使用 crypt() 加密

    我目前正在做一个非常安全的登录系统 但我是 crypt 函数的新手 需要一些快速帮助 我在注册过程中使用 crypt 加密密码字符串并将其保存到数据库中 但是 我如何在登录过程中解密密钥 或者我应该怎么做 或者是否可以对提交的密码字符串进行
  • 带重定向标准流的 C# + telnet 进程立即退出

    我正在尝试用 C 做一个 脚本化 telnet 项目 有点类似于Tcl期望 http expect nist gov 我需要为其启动 telnet 进程并重定向 和处理 其 stdin stdout 流 问题是 生成的 telnet 进程在
  • Android ScrollView fillViewport 不工作

    我有一个简单的布局 名称位于顶部 按钮位于屏幕底部 或者超出该按钮 以防我添加更多项目 所以我使用带有 LinearLayout 的 ScrollView 如下所示
  • Scrapy Spider不存储状态(持久状态)

    您好 有一个基本的蜘蛛 可以运行以获取给定域上的所有链接 我想确保它保持其状态 以便它可以从离开的位置恢复 我已按照给定的网址进行操作http doc scrapy org en latest topics jobs html http d
  • 在 Android 中使用 iText 将图像添加到特定位置

    我想使用 Android 中的 iText 将图像添加到 PDF 文件中的特定位置 这是一个可填写的表单 我添加了作为图像占位符的文本框 我想要做的就是像这样获取该文本框和图像 public class FormFill public st
  • Googletest:如何异步运行测试?

    考虑到一个包含数千个测试的大型项目 其中一些测试需要几分钟才能完成 如果按顺序执行 整套测试需要一个多小时才能完成 通过并行执行测试可以减少测试时间 据我所知 没有办法直接从 googletest mock 做到这一点 就像 async选项
  • Typescript 函数接口重载

    我有以下代码 interface MySecondInterface a type A interface MyInterface val1 string val2 string MySecondInterface a
  • 实例化 Microsoft.Office.Interop.Excel.Application 对象时出现错误:800700c1

    实例化 Microsoft Office Interop Excel Application 以从 winforms 应用程序生成 Excel 时 出现以下错误 这之前是有效的 但突然间它停止工作了 尽管代码和 Excel 版本没有变化 我
  • 自定义 Visual Studio 2008 中的位置栏

    有人成功定制了 VS 2008 的 Places Bar 吗 我从 VS 2005 进行的自定义设置并没有转移到 2008 显然 并且无论我如何处理注册表 我都无法使我的自定义位置出现在 打开 对话框中 我已经阅读并应用了相关的MS KB文
  • 从 Azure 应用服务连接到 MongoDB Atlas 集群

    我在 Azure 上有一个 Web 应用程序 它连接到 Atlas cloud mongodb com 上托管的 MongoDB 集群 我想使用 Atlas 这样我就不必关心 MongoDb 配置 问题是我的集群连接超时 我必须在我的 mo
  • 匿名结构体作为返回类型

    下面的代码编译得很好VC 19 00 23506 http rextester com GMUP11493 标志 Wall WX Za 与VC 19 10 25109 0 标志 Wall WX Za permissive 这可以在以下位置检
  • 使用泛型全面实现特征

    我正在通过实现矩阵数学来练习 Rust 但遇到了一些障碍 我定义了我认为与矩阵相关的特征 trait Matrix
  • 保存符号方程以供以后使用?

    From here http www mathworks com help releases R2011a toolbox symbolic brvfu8o 1 html brvfxem 1 我正在尝试求解这样的符号方程组 syms x y
  • 当ScrollView滚动到底部时加载更多数据

    我有一个带有动态加载内容的滚动视图 有时可能会有很多内容 所以我想在用户滚动到底部时加载更多内容 我搜索了合适的方法 发现了两种 onScrollChanged and getScrollY 但我不知道如何将它用于我的目的 请给我一些建议
  • 如果产品重量超过1000克,如何以公斤为单位显示

    在 Storefront 主题中 我使用下面的代码将格式化重量从 1000g 更改为 1kg add action woocommerce after shop loop item title show weight 10 function
  • android ndk 硬件调试内存

    背景 我对 C 很有经验 对 Android 和 Java 还很陌生 但这是编程的环境问题 我已经用 ANSI C 开发了一个管理应用程序 可以移植到任何操作系统 只需在依赖于操作系统的代码中添加 UI 即可 它使用相当多的内存 特别是对于
  • CUDA 中指令重放的其他原因

    这是我从 nvprof CUDA 5 5 获得的输出 Invocations Metric Name Metric Description Min Max Avg Device Tesla K40c 0 Kernel MyKernel do

随机推荐

  • 如何中止来自 Observable 的 Ajax 请求?

    我的代码包含这个简单的函数 我用它来将文件上传到我的 PHP 服务器 有一个xhr请求嵌套在RxJS Observable fileUpload file File Observable
  • VB.NET 中从另一个线程挂起一个线程

    我有一个从线程 我们称之为 MainThread 运行的窗口 以及一个执行其他非图形任务的后台线程 有时后台线程会调用MessageBox Show 方法 即modal并停止后台线程 在此调用之前 我想挂起 MainThread 并在之后恢
  • Html 选取框标签

    html marquee 标签是否已弃用 如果是 现代浏览器上有哪些替代方案 我想在我的 joomla 页面上创建一个简单的字幕效果 html marquee 标签是否已弃用 不 它首先必须成为语言的一部分才能被弃用 它只是专有的 如果是
  • 生成 macOS 框架时如何保留公共标头的目录布局

    我有一个 C 库的 CMake 项目 当前版本为 CMake v3 21 我正在将其移植到 macOS 并且我正在考虑将该库生成为操作系统框架 https developer apple com library archive docume
  • 如何使用 Automapper 映射复杂对象?

    我有几门课 public class Customer public string FirstName get set public string LastName get set public Product Product get se
  • 如何沿着时间线创建事件的可视化?

    我正在用 Python 构建可视化 我想在那里可视化加油站和我的汽车的燃油成本 此外 洗车及其成本以及维修都应该可视化 根据成本的不 同 燃料成本和洗衣成本应该有更高的标准 我创建了下面的可视化来描述这些概念 如何使用 matplotlib
  • 在 virtualenv 中找不到 Python 模块

    我无法让模块在我的虚拟环境中运行 以熊猫为例 随着虚拟环境的开启 我运行yolk l并返回 缩短版 basicpython xxxx LinuxBox pythonprojects basicpython yolk l Python 2 7
  • Pandas TypeError:无法转换为数字

    我正在开发一个项目 将数据从 SQL 导入到 pandas DataFrame 中 这似乎进行得很顺利 但是当我采取pandas mean 它抛出一个 TypeError 指出串联的值列表无法转换为数字 见下文 示例数据框 ProductS
  • POSIX 部分写入()

    如 SUSv4 或 POSIX 1 2008 中所述 http pubs opengroup org onlinepubs 9699919799 functions write html tag 16 685 08 http pubs op
  • C++ 使用类方法作为函数指针类型

    在 C 库中 有一个函数正在等待函数指针 这样 lasvm kcache t lasvm kcache create lasvm kernel t kernelfunc void closure 其中 lasvm kernel t 定义为
  • 除了 Tesseract 之外还存在哪些 OCR 选项? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使用 Tomcat 上运行的 servlet 进行文件 I/O

    我正在编写一个 Java servlet 使用 Tomcat 作为容器 它创建 PDF 文件并向最终用户提供服务 目前 PDF 文件是在内存中创建的 并作为对 POST 的响应写出 我想对此进行一些更改 以便将 PDF 文件写入磁盘 以便稍
  • Django 'pip install django-heroku'(psycopg2) 错误阻止部署到 Heroku

    我正在设置一个新的 Django 项目以在 Heroku 上部署 但是当我遵循 Django Heroku 部署指南时 我在 pip install django heroku 期间遇到错误 我正在运行 OS MacOS Mojave 10
  • 如果解决失败则重定向 Angular 2

    如果 Angular 2 中解析失败 如何重定向到另一个页面 我将此称为编辑页面的解析 但我想处理解析页面中的错误 我的决心 resolve route ActivatedRouteSnapshot Promise
  • 闪亮的反应功能没有按预期更新

    原始问题发布在这里 闪亮的反应性意外行为 https stackoverflow com questions 27478028 shiny reactive unexpected behavior该问题被重新发布在这里 试图改进之前在上面提
  • 绘制给定预先计算的计数和箱的直方图

    我有一些数据x我传递给numpy histogram x 获取计数和 bin 边缘 然后我将它们保存到文件中 稍后 我想加载此数据并绘制直方图 I have counts 20 19 40 46 58 42 23 10 8 2 bin ed
  • 在 R 中拟合非线性 Langmuir 等温线

    我想在 R 中为以下数据拟合等温模型 最简单的等温模型是此处给出的 Langmuir 模型型号在页面底部给出 http www alfisol com IFS IFS 003 LMMpro Langmuir php 下面给出了我的 MWE
  • 使用 Visual Basic 自动登录表单

    我需要使用 Visual Basic 10 0 创建一个自动登录表单应用程序 代码如下 table cellpadding 0 cellspacing 0 border 0 height 100 tr td width 50 height
  • 在 iPhone 中创建基于时间的提醒应用程序

    我正在开发基于时间的提醒应用程序 用户在其中输入他的提醒和提醒时间 问题是如何不断地将当前时间与用户定义的时间进行比较 任何示例代码都会有很大帮助 因为我被困在这一点上 将当前时间与用户定义的时间进行比较并不是正确的设计模式 UIKit 提
  • 导航组件防止在后按时重新创建片段

    我在项目中使用 Jetpack 导航组件 其中包含单个活动和一些片段 我有一个带有从服务器端填充的列表的片段 我打电话getDataFromServer on the onViewCreated然后 当用户单击某个项目时 会显示一个新片段