首页 > 其他分享 >Android 将 ViewModel 和 Compose界面的数据 双向绑定

Android 将 ViewModel 和 Compose界面的数据 双向绑定

时间:2024-07-26 17:30:04浏览次数:8  
标签:Compose mutableStateListInModel ViewModel mutableStateInModel mutableStateOf And

简介

双向绑定 说白了就是达到下面的效果:

  1. ViewModel 能够实时传输 从Room数据库查询到的数据 到 Compose页面。
  2. Compose页面 能实时传输 用户输入的数据 到 ViewModel 类。

需要分别在ViewModel和Compose中操作。

一、在ViewModel中:

1、使用mutableStateOf家族定义一个可变的值(这个值可以用于界面显示)

// 用于单个值
val mutableStateInModel = mutableStateOf("")
// 用于序列/数组
val mutableStateListInModel = mutableStateListOf<Any>()

解释:
mutableStateOf家族定义的数据自带了通知界面 重新绘制 的功能,如果需要实现实时更新界面数据的功能时,可以使用这个mutableStateOf方法来定义 数据源。

  1. 如果需要界面显示的值更新,直接改变这个“可变状态” 的 value值即可。
mutableStateInModel.value = data.toString()

二、在Compose页面中:

compose中有两个方法,按照自己喜欢选用其中一个就行 / 哪个一个在具体场景遇到问题就换另一个。

方法1

直接在具体的Compose组件中使用 在ViewModel使用mutableStateOf家族定义的可变值,就可以,如下面例子:

@Composable
OutlinedTextField(
   value = xxxxxViewModel.mutableStateListInModel[index].toString(),
   onValueChange = {
      xxxxxViewModel.mutableStateListInModel[index]= it
   },
   label = { Text("label") },
)

方法2

  1. 使用by remenber创建View中显示的数据。
val mutableValueInView by remember{
    viewModel.mutableStateInModel
}

使用by remember,将ViewModel中的数据关联到View中的变量。

  1. 在具体的Text中使用这个可以实时更新的值。
Text(
    text = mutableValueInView,
    Modifier.height(20.dp)
)

标签:Compose,mutableStateListInModel,ViewModel,mutableStateInModel,mutableStateOf,And
From: https://www.cnblogs.com/kingwz/p/18325863

相关文章

  • Android 内存分析(java native heap内存、虚拟内存、处理器内存.
    1.jvm堆内存(dalvik堆内存)每个Java应用程序在运行时都会拥有自己的JVM实例,这个实例会为其分配独立的堆内存空间。这意味着不同的应用程序之间不会共享堆内存。不同手机中app进程的jvm 堆内存是不同的,因厂商在出厂设备时会自定义设置其峰值。比如,在AndroidStudio创建模......
  • Android开发 - 滑动条监听进度setOnSeekBarChangeListener方法解析
    setOnSeekBarChangeListener方法的参数是一个SeekBar.OnSeekBarChangeListener类型的对象,该对象中包含了三个方法:onProgressChanged(SeekBarseekBar,intprogress,booleanfromUser):当SeekBar的进度发生变化时就会调用这个方法。在这个方法中,我们可以获取SeekBar滑动条的当......
  • Android开发 - 存储辅助类 SharedPreferences 解析
    SharedPreferences简介SharedPreferences是Android平台上一个轻量级的存储辅助类,用来保存应用的一些常用配置。SharedPreferences的数据以键值对(key,val)的进行保存在以xml形式的文件中。在应用中通常做一些简单数据的持久化缓存从editor的put方法可以看出SharedPreferenc......
  • Jetpack Compose学习(12)——Material Theme的主题色切换
    原文:JetpackCompose学习(12)——MaterialTheme的主题色切换-Stars-One的杂货小窝闲着无事研究了下JetpackComposeM3主题切换效果本系列以往文章请查看此分类链接Jetpackcompose学习如何生成主题首先,我们需要知道的是,M3有提供个在线网站供开发者进行快速生成主题,......
  • Dynamsoft Barcode Reader SDK Android Package 10.2.11
    BarcodeScannerforMobileIntegraterobustscanningcapabilitiesforQRcodeandotherbarcodetypesintoyournativeiOSandAndroidapps.DynamsoftBarcodeReaderSDKAndroidPackage10.2.11-Milli-SecondSpeedforMobileVideoStreamsUnderinteractive......
  • Android Studio自带Profiler工具内存泄露分析步骤
    1、运行需要检测内存泄露的程序这里以“com.example.opengltest”程序为例。2、点击Profiler按钮3、点击SESIONS"+"号按钮选择设备,选择对应设备下的应用或进程4、双击内存区块5、操作应用程序要检测的部分或模块6、关闭应用程序,多次点击鼠标右键“Forcegabagecollectio......
  • android[activity过渡动画不正确,不执行,效果不对?]style配置方式
    单个配置activity或者application全局配置<stylename="translucent"parent="Theme.MaterialComponents.Light.NoActionBar"><itemname="android:windowNoTitle">true</item><itemname="android:windowTitleSize&qu......
  • 【Android】数据存储方案——文件存储、SharedPreferences、SQLite数据库用法总结
    文章目录文件存储存储到文件读取文件SharedPreferences存储存储获取SharedPreferences对象Context类的getSharedPreferences()方法Activity类的getPreferences()方法PreferenceManager类中的getDefaultSharedPreferences()方法示例读取记住密码的功能SQLite......
  • delphi android发送与接收广播
    在Delphi中,可以使用TLocalBroadcastManager类来发送和接收广播。以下是一个示例:发送广播:```delphiuses Androidapi.JNI.GraphicsContentViewText,Androidapi.Helpers,Androidapi.JNI.JavaTypes,Androidapi.JNI.LocalBroadcastManager;procedureSendBroadcast(constAAction:......
  • Android 屏幕自适应
    介绍autosizeautosize是一个Android开源库,旨在简化适配不同屏幕尺寸和分辨率的工作。它主要解决了在不同设备上,应用界面可能因屏幕尺寸、分辨率和像素密度不同而出现的布局问题。自动适配:自动根据屏幕尺寸和分辨率调整布局大小和字体大小,减少了手动调整的工作量。支持......