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

如何在Activity中正确设置Observable,将数据从视图模型中的API调用传递到列表的Activity + data Class中。Android Compose

在Android Compose中,您可以使用StateLaunchedEffect来设置Observable,并将数据从视图模型中的API调用传递到列表的Activity和数据类中。以下是一个示例代码,演示如何实现这个功能:

首先,创建一个数据类,用于存储列表中的数据:

代码语言:javascript
复制
data class Item(val id: Int, val name: String)

然后,在Activity中,使用MutableState来保存数据列表,并使用LaunchedEffect来观察视图模型中的API调用结果:

代码语言:javascript
复制
class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val itemsState = remember { mutableStateOf(emptyList<Item>()) }

        LaunchedEffect(Unit) {
            val viewModel = ViewModelProvider(this@MainActivity).get(MyViewModel::class.java)
            val items = viewModel.getItems()
            itemsState.value = items
        }

        setContent {
            MyList(itemsState.value)
        }
    }
}

在上面的示例中,我们使用MutableState来保存数据列表,并使用LaunchedEffect来观察视图模型中的getItems() API调用的结果。一旦数据准备好,我们将其传递给MyList组件进行显示。

最后,在Compose中创建一个MyList组件,用于显示数据列表:

代码语言:javascript
复制
@Composable
fun MyList(items: List<Item>) {
    LazyColumn {
        items(items) { item ->
            Text(text = item.name)
        }
    }
}

在上面的示例中,我们使用LazyColumn来显示数据列表中的每个项。

请注意,上述示例假设您已经正确设置了视图模型(MyViewModel)和API调用(getItems())。您需要根据您的具体需求进行相应的调整。

通过使用上述代码,您可以在Android Compose中正确设置Observable,并将数据从视图模型中的API调用传递到列表的Activity和数据类中。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android应用架构分析(转)

代码被划分为两层结构:Data Layer(数据层)负责REST API或者持久数据存储区检索和存储数据;View Layer(视图层)职责是处理并将数据展示在UI上。...想象一个简单且常见场景,应用需要加载一个博客文章列表,然后缓存这些条目SQLite数据库,最后将他们展示ListView等列表视图上。...方法(回调) 等待CacheProvider回调结果,然后这些文章展示ListView等列表视图上 分别处理APIProvider和CacheProvider回调潜在异常。...这个简单示例方法如下: 调用Retrofit serviceREST API加载一个博客文章列表 使用DatabaseHelper保存文章本地数据库,达到缓存目的 筛选出今天发表博客...这个View组件也负责处理用户交互,点击事件和调用相应Presenter正确方法。

59220

Android应用架构

代码被划分为两层结构:Data Layer(数据层)负责REST API或者持久数据存储区检索和存储数据;View Layer(视图层)职责是处理并将数据展示在UI上。...想象一个简单且常见场景,应用需要加载一个博客文章列表,然后缓存这些条目SQLite数据库,最后将他们展示ListView等列表视图上。...) 等待CacheProvider回调结果,然后这些文章展示ListView等列表视图上 分别处理APIProvider和CacheProvider回调潜在异常。...这个简单示例方法如下: 调用Retrofit serviceREST API加载一个博客文章列表 使用DatabaseHelper保存文章本地数据库,达到缓存目的 筛选出今天发表博客,因为那才是...这个View组件也负责处理用户交互,点击事件和调用相应Presenter正确方法。

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

    Google Android 团队宣布了 Jetpack 视图模型之后,它已经成为了现代 Android 开发模式最流行架构之一,如下图所示: ?...在官宣 Jetpack 视图模型之后,同时 Google 在 [Jetpack Guide](https://developer.android.com/jetpack/guide#fetch-data...,使得代码更加简洁,提高了代码可读性 易于做单元测试 Kotlin Flow 如何在 MVVM 中使用 Jetpack 视图模型 MVVM 架构由 View + DataBinding + ViewModel...// 网络请求 val netWorkPokemonInfo = api.fetchPokemonInfo(name) // 网路请求数据,换转成数据 model...Dispatchers.IO) 切换到 IO 线程,最后通过 emit() 方法数据发送给 ViewModel,接下来我们来看一下如何在 ViewModel 接受 Flow 发送数据

    4.1K20

    Android使用RxJava+Retrofit2+Okhttp+MVP练习APP

    * 根据MovieService定义编写合适方法 * 其中observable是获取API数据 * observableCahce获取缓存数据 * new EvictDynamicKey(...一个逻辑模型可以对于多种视图模型 使用MVC目的是M和V实现代码分离,方便扩展,便于以后管理 开发者角度,MVC把应用程序逻辑层与界面是完全分开,最大好处是:界面设计人员可以直接参与界面开发...Android也可以说采用了当前比较流行MVC框架,在Android:    1) 视图层(View):一般采用XML文件进行界面的描述,使用时候可以非常方便引入,但是用xml编写了,又需要在...2) 控制层(Controller):Android控制层重任通常落在了众多Acitvity肩上,要通过Activity交割Model业务逻辑层处理,这样做另外一个原因是AndroidAcitivity...MVP优点: 模型视图完全分离,我们可以修改视图而不影响模型 可以更高效地使用模型,因为所有的交互都发生在一个地方——Presenter内部 我们可以一个Presenter用于多个视图

    4.3K80

    Android使用RxJava+Retrofit2+Okhttp+MVP练习APP

    * 根据MovieService定义编写合适方法 * 其中observable是获取API数据 * observableCahce获取缓存数据 * new EvictDynamicKey(...一个逻辑模型可以对于多种视图模型 使用MVC目的是M和V实现代码分离,方便扩展,便于以后管理 开发者角度,MVC把应用程序逻辑层与界面是完全分开,最大好处是:界面设计人员可以直接参与界面开发...Android也可以说采用了当前比较流行MVC框架,在Android:   1) 视图层(View):一般采用XML文件进行界面的描述,使用时候可以非常方便引入,但是用xml编写了,又需要在...2) 控制层(Controller):Android控制层重任通常落在了众多Acitvity肩上,要通过Activity交割Model业务逻辑层处理,这样做另外一个原因是AndroidAcitivity...MVP优点: 模型视图完全分离,我们可以修改视图而不影响模型 可以更高效地使用模型,因为所有的交互都发生在一个地方——Presenter内部 我们可以一个Presenter用于多个视图,而不需要改变

    40120

    DataBinding最全使用说明

    但是如果是视图设置数据则会走其他函数(get), 如果该函数返回类型和Model类型不匹配则会报异常, 除非你将那个函数改为类型匹配....在数据视图数据不统一时可以使用该注解@InverseMethod解决数据转换问题 例如数据模型存储用户id但是视图不显示id而是显示用户名(数据视图类型不一致), 我们就需要在两者之间转换....我们需要两个函数: 设置数据视图函数 称为set / 设置视图变更到数据函数 称为get set和get都至少要有一个参数 自身参数必须和另一个函数返回值对应(不然怎么叫转换) 简单示例: 在用户...// 存储数据 } } }; 所以如果你没用重写Inverse数据变更方法无法让视图通知数据刷新. // 该方***在绑定布局时候回调 @Override protected...通过DataBindingUtils工具将你自定义派生类设置Databinding, 这里包含全局默认和单例.

    2.1K20

    为任意屏幕尺寸构建 Android 界面

    △ 更改之前 Trackr 样式 上图是我们进行更改之前 Trackr 样式,您会发现不管在什么设备或屏幕下,都会有一个单窗口任务列表以及用于导航归档或设置页面的底部应用栏。...我们先来进行第一项优化,使用 NavRail 而非底部应用栏,首先我们要考虑是导航模型,所幸我们不会更改很多具体视图,仅仅只会更改导航方式,因为 NavRail 会一直存在于整个视图体系,可以通过它导航到任何其他视图...最后,在设置 NavRail 菜单栏 ID 来匹配现有导航目的视图 ID,再在 MainActivity 为 NavRail 设置 NavController: <!...△ JetNews 主界面展示 前文中已经介绍了 WindowManager API,目前我们正在将其集成 Compose 中去,以便更轻松地 Compose 访问这些信息。...其中比较有趣一点是思考应用如何在不同尺寸布局之间转换,例如对于可折叠手机,应用可能会较大屏幕变为较小屏幕。

    4.2K20

    用户界面开发基础

    当存在activity没有设置值时,会使用application值。 android:icon android:icon 必须指定一个图像资源ID,用来作为应用程序列表程序图标。...---- Activity生命周期 整体描述 ? Activity创建销毁过程需要在不同阶段调用7个生命周期方法。...---- 在不同Activity之间传递数据 Activity之间切换时,不可避免要进行数据传递,例如在单击列表某个列表项时,小需要编辑与这个列表项相关数据,这个时候就需要在显示一个Activity...,然后原始数据传递个这个Activity,这就是一个典型数据传递过程。...说明: Base64类是Android2.2开始支持,2.1及其以下版本无法通过Android SDK API 进行Base64编码和解码,因此需要借助第三方类库common httpclient

    1.8K20

    如何构建Android MVVM应用程序

    一个Activity文件,一看一言难尽, Android中经常会出现数千行Activity代码,究其原因,Android纯粹作为View各个XML视图功能太弱,Activity基本上都是View...在Android开发MVP设计思想用得比较多,利用MVP设计模型可以把部分逻辑代码Fragment和Activity业务逻辑移出来,在Presenter持有View(Activity或者...Fragment)引用,然后在Presenter调用View暴露接口对视图进行操作,这样有利于把视图操作和业务逻辑分开来。...但是这个模式还是存在一些不好地方,比较说: Activity需要实现各种跟UI相关接口,同时要在Activity编写大量事件,然后在事件处理调用presenter业务处理方法,View和Presenter...由 图 1 ViewModel模块我们可以看出ViewModel类下面一般包含下面5个部分: Context (上下文) Model (数据模型Bean) Data Field (数据绑定) Command

    1.3K10

    运维锅总详解如何设计出一个好API

    资源聚合层(API Aggregation Layer) 例子:第三方插件可以通过 API 聚合层额外功能集成 Kubernetes API ,例如网络策略插件。...命名规范:Android API 采用一致命名风格和编程模型,例如所有的 Activity 类名都以 Activity 结尾。...响应链机制 例子:UIApplication 通过 sendEvent: 方法传递触摸事件,事件依次传递视图控制器和视图。...Jetpack Compose:声明式 UI 编程。 例子:Activity 和 Fragment 作为视图组件,ViewModel 处理数据,LiveData 作为数据源。...例子:Activity 和 View 事件分发通过 dispatchTouchEvent() 处理。 响应链机制:使用响应链机制处理事件,事件在视图层级传递

    7310

    Mvvm、RxJava、Retrofit 三剑合璧

    简介 MVVM全称就是Model、View、ViewModel,View就是视图,对应Activity和xml文件,纯粹ui展示层,不涉及任何业务流程;Model就是数据模型,ViewModel就是最重要一层结构...Adapter写法 粉丝列表网络获取数据,主要演示RxJava+Retrofit基本使用方法 构建 理论讲了这么多,不废话了,下面就开始搭建MVVM应用程序。...在这个demo,一开始页面是没有数据,当我们在Activity调用ViewModelloadUserInfo后,dataBinding会把我们设置数据更新到ui上。...调用了set方法之后,View视图层就和ViewModel层绑定了。...聊天 RxJava + Retrofit 网络请求 前面讲三个页面都是单机游戏,数据都是本地假数据,最后来看下如果用RxJava+Retrofit进行网络请求,服务器请求粉丝列表

    2.6K20

    项目需求讨论 - 动态权限申请分析及相关第三方库源码分析

    targetSDKVersion >= 23 & API(手机系统) >= 6.0:安装时不会获得权限,可以在运行时向用户申请权限。用户授权以后仍然可以在设置界面取消授权。...我们可以看到APICompose介绍:通过一个特定Transformer函数来转换Observable。...因为后面在对某个权限申请做同意或者拒绝时候,就会把这个权限key-valuemRxPermissionsFragmentHashMap移除,所以这边获得到一直就是Observable.just...最后通过Observable.concatObservable.fromIerable生成数据原合并在一起变为一个Observable。 ?...所以Buffer操作符所要做事情就是数据按照规定大小做一下缓存,然后缓存数据作为一个集合发射出去。

    1.9K40

    Android RxJava+Retrofit完美封装(缓存,请求,生命周期管理)

    data可以为任何数据类型。...RxJava永远比你想象强大。RxJava那么多操作符看到我身体不适,有个操作符compose。...需要时候调用showProgressDialog即可。 处理数据缓存 服务器返回数据我们肯定要做缓存,所以我们需要一个RetrofitCache类来做缓存处理。...最后判断如果强制刷新就直接返回fromNetwork反之用Observable.concat()做一个合并。concat操作符多个Observable结合成一个Observable并发射数据。...要实现上面的功能其实很简单,两部分 随时监听Activity(Fragment)生命周期并对外发射出去; 在我们网络请求,接收生命周期 并进行判断,如果该生命周期是自己绑定Destory,那么就断开数据向下传递过程

    3.3K11

    Android入门教程 | Fragment 基础概念

    传递 container 对系统向扩展布局视图(由其所属视图指定)应用布局参数具有重要意义。 指示是否应在扩展期间扩展布局附加至 ViewGroup(第二个参数)布尔值。...(在本例,此值为 false,因为系统已将扩展布局插入 container,而传递 true 值会在最终布局创建一个多余视图组。) 接下来,需将该片段添加到您 Activity 。...向Activity添加Fragment 通常,片段会向宿主 Activity 贡献一部分界面,作为 Activity 整体视图层次结构一部分嵌入 Activity 。...如要在 Activity 执行片段事务(添加、移除或替换片段),则必须使用 FragmentTransaction API。...fragment.setArguments()传递fragment; 在该Fragment通过调用getArguments()得到bundle对象,就能得到里面的值。

    3.5K40

    Android DataBinding 入门进阶,看这一篇就够

    DataBinding 能够省去我们一直以来 findViewById() 步骤,大量减少 Activity代码,数据能够单向或双向绑定 layout 文件,有助于防止内存泄漏,而且能自动进行空检测以避免空指针异常...layout 标签原布局包裹了起来,data 标签用于声明要用到变量以及变量类型,要实现 MVVM ViewModel 就需要把数据(Model)与 UI(View)进行绑定,data 标签作用就像一个桥梁搭建了...方法 之后可以在 Activity 通过 DataBindingUtil 设置布局文件,省略原先 Activity setContentView() 方法,并为变量 userInfo 赋值...,所以在预览视图中什么都不会显示,不便于观察文本大小和字体颜色等属性,此时可以为之设定默认值(文本内容或者是字体大小等属性都适用),默认值只在预览视图中显示,且默认值不能包含引号 android:...双向绑定意思即为当数据改变时同时使视图刷新,而视图改变时也可以同时改变数据 看以下例子,当 EditText 输入内容改变时,会同时同步变量 goods,绑定变量方式比单向绑定多了一个等号:

    7.1K72

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

    setContent方法也是有@Compose注解方法。所以,在setContent写入关于UI@Compopse方法,即可在Activity显示。...- 状态提升是一种编程模式,在这种模式下,通过将可组合项内部状态替换为参数和事件,状态移至可组合项调用方。 - 状态提升过程可让您将单向数据流扩展无状态可组合项。...Android View 如果碰到在Compose环境,想要使用AndroidView视图情况,只需要使用AndroidView函数即可 @Composable fun CustomView...Android主流基于流方案, - LiveData.observeAsState() - Flow.collectAsState() - Observable.subscribeAsState...如果你是因为缺少学习资料,而我正好薅这本谷歌内部大佬根据实战编写《Jetpack Compose最全上手指南》,入门精通,教程通俗易懂,实例丰富,既有基础知识,也有进阶技能,能够帮助读者快速入门

    6.4K60

    Easy Clean architecture on Android

    或Fragment摆放几个View用来展示屏幕上,后台耗时任务放在Service执行,组件之间使用Broadcast传递数据,由此看来“人人都能成为Android工程师”,真的是这样吗?...与调用关系对应就是数据走向: clean architecture data stream 在app接受用户行为,根据domain定义业务规则,访问model真实数据,然后依次返回,最终更新界面...其次,更细节子模块划分: UI 视图,包含所有的Android控件,负责UI展示。 Presenter 处理用户交互,调用适当业务逻辑,并将数据结果发送到UI进行渲染。...也就是说Presenter担任着接口适配层责任,连接Android实现和业务逻辑,负责数据传递和回调。...DB&API 数据库和API实现都应该放在这里,比如上面示例,可以DAO,Retrofit,json解析等放在这里。

    57130
    领券