同一活动中不同可组合功能的不同视图模型

2023-12-27

我在堆栈溢出的某个地方读到过-

如果您正在创建新应用程序,则可以完全跳过使用 Fragment 只需使用可组合函数来表示您的屏幕即可。

但是,在使用片段时,我们可以针对不同的片段/屏幕使用不同的视图模型。我们可以通过可组合函数实现相同的目标吗?例如单个活动、不同屏幕的不同可组合函数以及不同可组合函数的不同视图模型?如果是,这是理想的方法?


但是,在使用片段时,我们可以为不同的片段/屏幕使用不同的视图模型。

在 Compose 中,您可以使用可组合函数来显示屏幕 - 不再需要使用片段。

我们可以通过可组合函数实现相同的目标吗?例如单个活动、针对不同屏幕的不同可组合函数以及针对不同可组合函数的不同视图模型?

如果需要,您可以将不同的 ViewModel 用于不同的可组合函数。您可以这样做:

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContent {
            DifferentViewModels()
        }
    }
}

@Composable
fun DifferentViewModels() {
    Column {
        FirstComposable()
        SecondComposable()
    }
}

@Composable
fun FirstComposable(firstViewModel: FirstViewModel = viewModel()) {
    Text(firstViewModel.value)
}

@Composable
fun SecondComposable(secondViewModel: SecondViewModel = viewModel()) {
    Text(secondViewModel.value)
}

class FirstViewModel() : ViewModel() {
    val value = "Value from the first View Model"
}

class SecondViewModel() : ViewModel() {
    val value = "Value from the second View Model"
}

确保在 build.gradle(Module) 文件中添加 ViewModel 依赖项:

// Compose ViewModel
implementation "androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha07"

如果是,这是理想的方法吗?

这取决于您的项目要求。如果您有不同的大屏幕,需要存储许多不同的值并且不需要与不同的屏幕共享它们,则可以为它们使用不同的 ViewModel。

如果屏幕很小和/或您需要在它们之间共享值,则共享一个 ViewModel 将是一种方法。

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

同一活动中不同可组合功能的不同视图模型 的相关文章

  • 如何使全屏覆盖在方向更改后保持全屏?

    我正在制作一个应用程序 它可以创建在屏幕上行走的微小精灵动画 我有一个主要活动 带有 启动服务 按钮 这会启动一个服务 该服务 在onCreate 创建一个全屏视图并将其附加到根窗口管理器 这部分工作完美 它充满了屏幕 您可以离开应用程序
  • 如何在 Android 中的 Chrome 或 Firefox 等特定浏览器的 Web 视图中加载应用程序

    我是 Android 新手 我正在做一个应用程序 我需要在平板电脑上的 Web 视图中加载现有的应用程序 在平板电脑中 当我使用 Web 视图加载应用程序时 我的应用程序将加载到默认浏览器中 如何在平板电脑上的 Web 视图中的特定浏览器
  • 垂直 ViewPager 中的动画

    我需要垂直制作这个动画ViewPager https www youtube com watch v wuE 4jjnp3g https www youtube com watch v wuE 4jjnp3g 这是我到目前为止所尝试的 vi
  • Android 中是否可以使用滑动视图导航的刻度线?

    我想在 Android 应用程序中创建一组页面 这些页面可以水平滑动并使用刻度线来指示当前页面在我拥有的 12 个页面集中的位置 Android 设计文档中提到了像这样使用刻度线的设计模式 http developer android co
  • 获取Android库中的上下文

    我正在编写一个 Android 应用程序 它的一些功能封装在内部库中 但是 要使此功能发挥作用 库需要一个应用程序上下文的实例 为图书馆提供这种上下文的最佳方式是什么 我看到了一些选择 但没有一个有吸引力 Have my library c
  • Android 和 Honeycomb - 如何使用 SDK 13 拥有菜单图标而不需要“操作栏”

    我想最大限度地利用 Honeycomb 应用程序的屏幕 由于屏幕底部已经被 始终打开 的项目所困 我想在该空间中添加一个菜单按钮 而不是牺牲更多的屏幕空间 在顶部放置一个 操作栏 我怎样才能做到这一点without降级到 API 10 或更
  • 返回到上一个活动的最后状态

    我有两个活动 A 和 B 当应用程序启动时 活动 A 会被加载 我会从数据库将数据加载到其中 我可以毫无问题地转到活动 B 但是当我返回活动 A 时 会查看旧数据一段时间 然后重新加载活动 知道如何解决这个问题吗 在从数据库加载数据之前清除
  • webview 中的 android 移动 Twitter 页面无法打开?

    我正在尝试打开以 https 开头的 Twitter 页面webview在安卓中 但它没有打开 并且持续加载时出现黑屏 屏幕截图如下 Edit 在主网络视图中我有 Twitter 页面的链接https twitter com mytwitt
  • 如何去掉android状态栏的电池图标?

    我通过去掉背景图像来删除 Android 中显示网络 电池和时间信息的状态栏 但图标仍然存在 我也想知道如何删除电池图标 不是用于应用程序 而是用于框架开发 提前致谢 你试过打电话吗 getWindow setFlags WindowMan
  • java.lang.AssertionError:CALL 'public final fun

    我正在尝试使用 jetPack Compose 制作一个项目 我拥有它工作所需的所有必要依赖项 但是当我运行我的应用程序时 它会抛出一个错误 我找不到解决方案 这是错误 java lang AssertionError CALL publi
  • 绘制平滑曲线

    我想创建更平滑的曲线 而不仅仅是线角 这是我现在画的图 这是我的代码 case FREEHAND float pts float ptk ptk new float 2 imageMatrix invert inv if mCurrentS
  • 如何在移动应用程序上连接到服务器?

    我是移动应用程序的新手 我基本上来自网络开发平台 我只是在玩 App Framework LungoJS Jquery Mobile kendo 等移动框架 以获得该垂直领域的一些知识 我正在开发的应用程序仍然处于 UI 级别 我所需要的只
  • Proguard 正在破坏我的清洁度。 Gson 和泛型

    我有一个从持久性加载信息的函数 我只是以一种非常简单的方式告诉它的类型 该类称为SharedPreferencesHelper kt所以它是一个真正的生活问题解决者 fun
  • 无法使用 Zxing Android 扫描 Code 128

    我已将 ZXing 条码阅读器集成到我的 Android 应用程序中 它可以扫描大部分代码 但我有一张电费单 它无法扫描 使用 Galaxy Ace 5 0MP 我认为问题是由于相机分辨率和焦点造成的 因为当我使用 Xperia SL 12
  • 通过 Google 帐户从 Google Play 安装的应用程序列表

    以下是我的问题 是否可以通过使用任何 api 以编程方式通过 Google Play 获取用户已安装的应用程序列表 请注意 我并不是询问设备中当前安装的应用程序列表 而是询问在某个时刻已安装的应用程序列表 我需要解决上述问题 因为我正在考虑
  • 具有隐式授权的 OAuth 应用程序中的客户端模拟

    来自 OAuth 草案 隐式section https datatracker ietf org doc html draft ietf oauth v2 31 section 1 3 2 在隐式授权流程期间发出访问令牌时 授权服务器不对客
  • 如何在android中将文本放在单选按钮的左侧

    我想将单选按钮的文本放在左侧而不是右侧 我找到了这个解决方案
  • 我想要有条件的登录导航,没有 MAIN 片段或按钮

    我正在使用 Android Jetpack 导航组件 实时数据和 Firebase 我希望工作流程就像用户打开应用程序时一样 然后根据登录 注销状态导航到登录 配置文件片段 而不需要任何主片段或按钮 请 我的应用程序中没有主要片段 用户启动
  • 带有不透明导航栏的深色文本透明状态栏

    等等 这不是重复的 类似的问题已被问到here https stackoverflow com questions 38025865 android fully transparent status bar with non transpa
  • Android ClassNotFoundException:在路径上找不到类

    10 22 15 29 40 897 E AndroidRuntime 2561 FATAL EXCEPTION main 10 22 15 29 40 897 E AndroidRuntime 2561 java lang Runtime

随机推荐

  • 如何使用 Google Maps API v2 确定道路上的经纬度坐标

    我已经使用了谷歌地理地址并使用纬度 经度得到了地址 如何确定我是否在路上 基本上是道路碰撞测试 我目前正在使用位置管理器来管理纬度 经度 并且公路上和公路旁的地理地址相同 最终解决方案 Use 通过 Google Geocoding API
  • ASP.NET MVC ActionLink 保留“旧”路由参数

    我的两个过滤链接 Html ActionLink Customer 1 Index new customer 1 Html ActionLink Project A Index new project A 我的带有过滤功能的控制器 publ
  • 在图像周围浮动文本

    我需要帮助创建一个围绕价格标签浮动的文本容器 如下图所示 这是我到目前为止所尝试过的 jsFiddle 演示 http jsfiddle net kzmndzj4 HTML div class product p Lorem ipsum d
  • 返回 Lua 表中值的索引

    我在lua中有这张表 local values a b c 如果变量等于表条目之一 有没有办法返回表的索引 说 local onevalue a 如何在不迭代所有值的情况下获取表中 a 或一个值的索引 没有迭代就没有办法做到这一点 如果您发
  • 如何使用“setTimeout”调用对象本身

    为什么我不能使用setTimeout在 JavaScript 对象中 Message function this messageFactory this feedbackTag document getElementById feedbac
  • OpenACC + MPI Fortran 程序入门

    我有一个工作串行代码和一个通过 OpenACC 并行化的工作并行单 GPU 代码 现在我尝试通过在多个 GPU 上运行 采用 mpi openacc 范例来增加并行性 我用 Fortran 90 编写代码 并使用 Nvidia 的 HPC
  • PHP include/require 不传递变量

    是否可以在 PHP 中包含一些东西without传递传递给原始脚本的变量 我正在使用 Joomla 并且我收到了错误记录here https stackoverflow com questions 8356683 joomla error
  • 如何通过 adb android 更改首选网络类型?

    如何使用 ADB 更改首选网络类型 示例 设置仅使用 GSM 仅使用 WCDMA 仅使用 LTE 或自动 这适用于我的设备 adb shell sqlite3 data data com android providers settings
  • 获取 ObservableValue 的所有已注册侦听器

    如何让所有听众获得可观察的值 我可以扩展课程并覆盖addListener and removeListener将它们存储在集合中的方法 但该集合应该已经以某种方式存储在可观察值内 我怎样才能得到那一套 I find a way around
  • Powershell获取完整路径信息

    我有一个名为视频的目录 在这个目录里面 是一堆各种相机的子目录 我有一个脚本可以检查各个摄像机 并删除早于特定日期的录制内容 我在获取相机的完整目录信息时遇到了一些麻烦 我正在使用以下方法来获取它 Get all of the paths
  • IOS 覆盖本地通知

    我创建了一个Local Notification当某个按钮 SetButton 被点击 我现在的问题是如果SetButton再次按下 它不会覆盖第一次按下 它会显示 2 个通知 依此类推 如何确保第二次按按钮会覆盖第一次按按钮并且不会累积通
  • 后台工作者是一个线程吗? (C#)

    后台工作者是一个线程吗 我应该什么时候使用它 是的 它基本上就像一个线程 但具有额外的功能 通知您进度和完成时间的事件 每当您需要执行可能需要一段时间的操作 例如计算 文件或数据库读 写 Web 请求等 并且您不希望 GUI 在执行时显得无
  • 如何挂钩 MANAGED(.NET) 进程并收集该进程内的信息?

    我需要挂钩托管 C C CLI 进程 我需要查找有关它有多少个窗口 其关联控件及其属性 的信息并将其发送到用 C 托管代码编写的目标应用程序 为此我需要做什么 我是否需要探索该托管进程的 IAT 导入地址表 和 EAT 导出地址表 我需要用
  • Rails 从现有表生成模型?

    我对 Rails 框架非常陌生 想知道如何基于现有表生成模型 例如 我有一个名为 person 的表 并且想要根据该表中的列生成模型 但是 每当我使用 ruby script generate model Person skip migra
  • video-react 属性宽度和高度不起作用

    按照这个doc https video react js org components player 我们可以在属性中添加玩家的宽度和高度
  • 在 text/xml 值中编码 CR-LF 换行符的正确方法是什么?

    与可以执行任何操作的 application xml 文件或将所有空白序列转换为单个空格字符的标准化字符串值相反 我在这里专门询问具有字符串值的文本 xml 文件的上下文 为了简单起见 假设我仅在 UTF8 编码文件中使用 ASCII 字符
  • 是否可以将Python Seaborn与plotly集成

    我正在为plot ly寻找python seaborn的一些指导 是否可以在plot ly 上提供seaborn 图表 有可用的示例或教程吗 请帮忙 提前致谢 Seaborn 基于 matplotlib Plotly 可以转换 matplo
  • 带有 json 文件的 C++ Boost 程序选项

    可以使用 boost 程序选项库 http www boost org doc libs 1 64 0 doc html program options html http www boost org doc libs 1 64 0 doc
  • 启用链接时优化会导致链接器错误吗?

    我有可以正常编译和链接的代码 我现在尝试启用链接时优化 但添加 flto我的编译器和链接器标志导致链接器错误 usr local lib libboost thread a thread o In function void boost t
  • 同一活动中不同可组合功能的不同视图模型

    我在堆栈溢出的某个地方读到过 如果您正在创建新应用程序 则可以完全跳过使用 Fragment 只需使用可组合函数来表示您的屏幕即可 但是 在使用片段时 我们可以针对不同的片段 屏幕使用不同的视图模型 我们可以通过可组合函数实现相同的目标吗