首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

写给初学者Jetpack Compose教程,使用State让界面动起来

UI显示部分很好理解,这里关键就是如何允许用户通过点击Button来让计数器加1。...这个方案之前在View系统中就被广泛使用,在Compose当中也仍然有效。我们稍后就会讲解如何Compose使用ViewModel。...首先我们要引入如下两个,这是Compose为了适配ViewModelLiveData而专门设计: dependencies { implementation "androidx.lifecycle...如果你对Kotlin Flow用法还不熟悉,可以在公众号主页回复“Flow”,就能看到我之前写Kotlin Flow三部曲了。...不用说,这个函数作用就是Flow转换成State。 那么到这里,相信你已经了解如何Compose中无缝对接ViewModel了。

68820

掌握 Jetpack Compose State,看这篇就够了

最理想情况下,整个 UI 界面的状态应该在一个统一地方计算(通常是在ViewModel中),计算完状态将从上到下传递到所有可组合项里。...有状态可组合项一般会持有ViewModel引用,由ViewModel负责计算整个 UI 界面的状态。当界面状态发生了改变,新状态会 UI 界面级别的可组合项一路传递到消费这个状态子可组合项。...使可组合项保持无状态方法:状态提升顾名思义,状态提升意味着把任何和状态存储相关状态可组合项函数中删除,然后通过函数参数状态值传进可组合项函数内。...附加内容:在 Jetpack Compose 中,如何使用 Kotlin Flow、RxJava 或者 LiveData 表示状态?...:InputText 延迟和对应规避方式如何ViewModel 中表示状态如何 Android 中其他表示类型状态转成 Jetpack Compose状态希望能对你有帮助。

7.2K111
您找到你想要的搜索结果了吗?
是的
没有找到

MVVM 成为历史,Google 全面倒向 MVI

相信很多人都会有疑问,为什么不使用官方推荐MVVM,而要用你说这个什么MVI架构呢?...我们一般使用ViewModel作为UI State容器,因此响应用户输入更新UI State主要分为以下几步: ViewModel存储并公开UI State。...举个例子,如果用户需要给新闻列表加个书签,那么就需要将事件传递ViewModel,然后ViewModel更新UI State(中间可能有数据层更新),UI层订阅UI State订响应刷新,从而完成页面刷新...暴露与更新UI State 定义好UI State并确定如何管理相应状态后,下一步是提供状态发送给界面。...我们可以使用LiveData或者StateFlowUI State转化为数据流并暴露给UI层 为了保证不能在UI中修改状态,我们应该定义一个可变StateFlow与一个不可变StateFlow

1.7K10

ViewModels and LiveData- Patterns + AntiPatterns

这个系列做了协程和Flow开发者一系列文章翻译,旨在了解当前协程、Flow、LiveData这样设计原因,设计者角度,发现他们问题,以及如何解决这些问题,pls enjoy it。...img 视图(Activity或Fragment)引用传递ViewModel是一个严重风险。让我们假设ViewModel网络上请求数据,并且数据在一段时间后回来。...建议有一个单独存储类作为处理这种复杂性单一入口。 如果你有多个非常不同数据模型,可以考虑添加多个存储。...视图如何区分正在加载数据、网络错误和一个空列表? 你可以ViewModel中暴露出一个LiveData。例如,MyDataState可以包含关于数据是否正在加载、是否已经成功加载或失败信息。...使用LiveData存储ViewModel之间进行通信,其方式类似于在View和ViewModel之间使用LiveData。 这点用Flow也可以解决。

1.1K30

Android 面试题:为什么 Activity 都重建了 ViewModel 还存在?—— Jetpack 系列(3)

:数据驱动型界面控制器(本文)[2] 4、Flow:LiveData 替代方案[3] 5、 MVC 到 MVP、MVVM、MVI:Android UI 架构演进[4] 6、ViewBinding:新一代视图绑定方案...ViewModel 作用可以区分 2 个维度来理解: 1、界面控制器维度: 在最初 MVC 模式中,Activity / Fragment 中承担职责过重,因此,在后续 UI 开发模式中,我们选择...关于 MVVM 等模式更多内容,我们在 5、 MVC 到 MVP、MVVM、MVI:Android UI 架构演进[10] 这篇文章讨论过。...1、ViewModel使用场景针对于配置变更重建中非配置数据恢复,由于内存是可以满足这种存储需求,因此可以选择内存存储。...总结 到这里,Jetpack 中 ViewModel 组件就讲完了。下一篇文章,我们来讨论 LiveData 替代方案 Flow[12]。关注,带你了解更多。

1.1K20

Android从零开始搭建MVVM架构(4)——LiveData

LiveData对象一旦连接到系统服务,任何需要该资源Observer都只需观察这个LiveData对象。 如何使用LiveData? 1.创建一个LiveData实例来保存特定类型数据。...您通常在UI控制器(如Activity或Fragment)中创建Observer对象。 3.使用observe()方法Observer对象注册到LiveData对象。...当更新数据时,会生成所有必要代码来更新LiveData对象。 生成代码在需要时在后台线程上异步运行查询。 这种模式对于保持用户界面中显示数据与存储在数据数据同步很有用。...Transformations.map() 使用一个函数来转换存储LiveData对象中值,并向下传递转换后值。...例如,如果在UI中有一个本地数据或网络获取更新LiveData对象,则可以将以下数据源添加到MediatorLiveData对象: 与存储在数据数据关联LiveData对象。

2.2K30

【译】LiveData三连

这个系列做了协程和Flow开发者一系列文章翻译,旨在了解当前协程、Flow、LiveData这样设计原因,设计者角度,发现他们问题,以及如何解决这些问题,pls enjoy it。...最引人注目的是LiveData类和相关生命周期感知类、Room持久性和新分页。在这篇文章中,探讨LiveData类,它期望希望解决问题以及何时去使用这个。...我们可以Controller设置为使用更多迷你Controller,每个Controller都会自己改变相应UI元素,从而将改变UI功能完全活动中提取出来。...尽管你可以一个函数作为参数而不是UI组件本身传递,但在这里你也应该知道UI组件生命周期,因为该函数通常会操作该组件UI元素。...因此,肯定会有一种试图最大限度地利用它们诱惑:) 在这篇文章中,谈谈在什么情况下不推荐使用LiveData,以及你可以使用替代方案。

1.6K20

Google 推荐在 MVVM 架构中使用 Kotlin Flow

Fragment 1.2.0 上重要更新:通过 Fragment 构造函数传递参数,以及 FragmentFactory 和 FragmentContainerView 使用 近期也在开发另外一个...,造成内存泄露是很正常事,大家可以 StackOverflow 上查看一下,有很多因为 RxJava 造成内存泄露例子 RxJava 入门门槛很高,学习过朋友们,相信能够体会到入门到放弃是什么感觉...[pokeapi] (https://pokeapi.co/)详情页接口,获得最新数据,然后存储在数据中。...Dispatchers.IO) 切换到 IO 线程,最后通过 emit() 方法数据发送给 ViewModel,接下来我们来看一下如何ViewModel 中接受 Flow 发送数据。...如何处理 ViewModel 三种方式 如果不使用数据绑定,在 Activity 或者 Fragment 中如何处理 ViewModel 三种方式。

4.1K20

谷歌大佬强势分享《Jetpack Compose 权威指南》,带你参透声明式UI终极奥义!

先抛出结论:如果你想运用到实际生产环境中,Flutter 肯定是更好选择,因为更多的人帮你踩过了坑。...目前,能够直接在 Compose使用 Jetpack 有:Navigation、Paging、ViewModelLiveData、hilt 、lifecycle 理论上来讲,Android Jetpack...上跟 UI 不相关 Compose 应该都是支持,在Hoo中,就使用了Paging、Navigation、ViewModelLiveData等 Android Jetpack ,再有协程和...二 如何快速学习Compose 接下来,将给大家介绍一份谷歌大佬强势分享《Jetpack Compose 权威指南》,手把手教大家Jetpack Compose入门到精通。...执行模式 Positional Memoization (位置记忆化) 存储参数 重组 …… 第三章 Jetpack Compose实战演练 1.

4.1K30

LiveData 迁移到 Kotlin 数据流

LiveData 历史要追溯到 2017 年。彼时,观察者模式有效简化了开发,但诸如 RxJava 一类对新手而言有些太过复杂。...接下来我们一起比较 LiveData 和 Kotlin 数据流中相对应写法吧: #1: 使用可变数据存储器暴露一次性操作结果 这是一个经典操作模式,其中您会使用协程结果来改变状态容器: △ 一次性操作结果暴露给可变数据容器...()) } } 由于状态容器总是有值,那么我们就可以通过某种 Result 类来把 UI 状态封装起来,比如加载中、成功、错误等状态。...数据不再被读取,而是被观察,因此我们对数据源改动会直接被传递UI 界面中。...若使用 LiveData,可以数据流转换为 LiveData 实例,然后通过 emitSource 传递数据变化。

1.4K20

【建议收藏】Jetpack Compose编程知识全汇总 (含详细实例讲解)

以下三种方式可初步体验: 尝试使用Jetpack Compose 示例应用 创建支持Jetpack Compose 新应用 现有项目中支持Jetpack Compose 基于现状,主要介绍第三种方式...、基础使用 Jetpack Compose包含了基本组件compose.ui、Material Design 组件、动画组件等众多UI组件,在此就不赘述了,在对应文档中大家都可以参阅,此处重点讲解一下关于...imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 使用单向数据流应用界面更新循环如下所示: 事件:事件由界面的一部分生成并且向上传递。...##### ViewModel 源码可看出,viewmodel函数底层也是通过ViewModelProvider进行获取 @Composable fun viewModel...大家支持和认可,是分享最大动力。

6.2K60

360度无死角,Android Jetpack面试技巧大揭秘

本文围绕Android Jetpack展开,深度解析面试中可能涉及到高级疑难问题,分享一些关于Android Jetpack面试技巧,帮助你更好地准备面试。...它使用场景包括但不限于: 单一活动多Fragment架构: 通过所有Fragment集中在一个活动中,简化了导航管理和传递数据复杂性。...问题: 详细说明LiveDataViewModel工作原理,并讨论在实际项目中如何解决常见生命周期问题。...参考简答: LiveData是一种可观察数据持有者,ViewModel用于存储和管理与用户界面相关数据。...Room数据性能优化 问题: 在使用Room数据时,有哪些性能优化手段可以提高数据访问效率? 出发点: 了解在实际项目中,如何通过一些技巧提高Room数据性能。

15810

Android UI 架构演进: MVC 到 MVP、MVVM、MVI

这四个模式讨论是 “如何管理 UI” 这个话题,只是实现细节不同。...MVC MVC 其实是 Android 默认设计,MVC 里代码分为三个部分: View: Layout XML 文件; Model: 负责管理业务数据逻辑,如网络请求、数据处理; Controller...View 概念相同; Model: 负责管理业务数据逻辑,如网络请求、数据处理,与 MVP 中 Model 概念相同; ViewModel存储视图状态,负责处理表现逻辑,并将数据设置给可观察数据容器...Lifecycle: 生命周期状态回调; LiveData: 可观察数据存储类; databinding: 可以自动同步 UI 和 data,不用再 findviewById(); ViewModel...但是不可否认, React 到 Flutter, MVI 到 Compose,响应式编程似乎有一统天下趋势。未来会怎么样,我们拭目以待。

91210

知识点 | ViewModel 四种集成方式

ViewModel 可以数据层与 UI 分离,而这种架构不仅可以简化 UI 生命周期控制,也能让代码获得更好可测试性。如果想了解更多,可以参考 ViewModel: 简单介绍视频和官方文档。...下面的文章中,介绍 ViewModel 四种集成方式: ViewModel Saved State —— 后台进程重启时,ViewModel 数据恢复; 在 NavGraph 中使用 ViewModel...—— ViewModel 与导航 (Navigation) 组件集成; ViewModel 配合数据绑定(data-binding) —— 通过使用 ViewModelLiveData 简化数据绑定...如果它是 LiveData,那么 UI 根据 LiveData改变自动刷新。...传递给数据绑定 (binding),如果同时有在 ViewModel使用 LiveData,则可以通过 binding.setLifecycleOwner(lifecycleOwner) 让 UI

22720

Jetpack-Compose 学习笔记(五)—— State 状态是个啥?又是新概念?

组合:按照文档上意思觉得可以理解为展示给用户界面,是由多个组合项(Composable组件)组成。 Event事件:指的是应用外部生成输入,用于通知程序某部分发生了变化。...2.1 ViewModel ViewModel 也是 Jetpack 工具成员之一,主要用来存储 UI 展示所需要数据,谷歌推荐做法是 Activity 中数据都放到 ViewModel 里...ViewModel 经常与 LiveData 一起使用,但在 Compose 中,推荐使用 MutableState 来具体存储数据值。...6.3 MapSaver Compose 还考虑到有些情况下 Parcelize 不适用场景,那么还可以使用 MapSaver 来定义自己存储和恢复规则,规定如何把对象转为可保存到 Bundle 中值...Compose 推荐使用 ViewModel 来管理状态,包括状态更新以及存储等。

2K30

Android Jetpack - LiveData

LiveData 对象通常存储ViewModel 对象中,并通过 getter 方法访问,如以下示例所示: class NameViewModel : ViewModel() { private...UI 控制器在其处于活跃状态时立即显示数据,只要应用组件处于 STARTED 状态,它就会它正在观察LiveData 对象中接收最新值 class MainActivity : AppCompatActivity...与 Room 一起使用 LiveData Room 持久化支持可观察查询并返回 LiveData 对象,这些查询一般在 DAO 中编写 在更新数据时,Room 会生成更新 LiveData 对象所需所有代码...,此模式对于使 UI 中显示数据与存储在数据数据保持同步非常有用。...具体可以参考 Android Jetpack - Room 一文所提供代码示例 转换 LiveData 您可能希望在 LiveData 对象分派给观察者之前更改存储LiveData 对象中值,

2K30

浅谈ViewModel

1 主要功能 Activity、Fragment存活期间数据存储; bind同一Activity多个Fragment间数据共享; 独立或与LiveData配合实现代码解耦; 2 使用方法 1) 引入...,且A、B均有读取、修改业务需求; 传统实现方法1:Intent +onFragmentResult() 大致流程: 跳转时需要将数据按k-v封装入Bundle,或者数据Parcelable传递给下个页面...Bundle、Parcelable这些用起来很麻烦控件; 数据生命周期由ViewModel内部掌控,无需手动管理销毁; 2) 与LiveData配合实现UI、业务逻辑分层 同为官方架构组件LiveData...通过Demo,以及LiveDataViewModel同处一个module,可以看出官方非常建议两者搭配使用。再配合以往Data-Binding,可以快速搭建起一套简易MVVM业务体系。...范围内监听数据变化; ViewModel:在Lifecycle范围内存储和共享数据; Room:简化Db操作; 除了Room,可以感受到官方在尽力把大家最初MVC往MVVM引导,更加强大官方组件将使

2.6K90

Android Paging使用详解(小结)

只有数据 要设置RecyclerView观测本地存储, 偏向于使用Room持久化....PagedList实例既可以使用LiveData<PagedList 也可以使用Observable<List 对UI传递数据更新, 同时最小化了加载时间和内存使用....在这些情况下, 把adapter数据类型转化为LiveData<PagedList , 之后在尝试使用这些数据项在UI中填充起来之前, 这个列表在ArrayAdapter对象中包裹起来....分页包让你直接后台使用网络提供键加载数据. 数据量太大. 使用分页包可以数据加载分页直到没有任何数据留下. 更方便地观测数据. 分页包能够展示应用在可观测数据结构中持有的ViewModel....如下代码展示了如何在应用ViewModel类中使用RoomDataSource.Factory构建能力创建新LiveData<PagedaList 实例: ConcertDao.kt: interface

2K30
领券