当前位置: 首页 > news >正文

网站建设 招标任务书高端设计图网站

网站建设 招标任务书,高端设计图网站,做流量的网站应该注意什么,城市网站建设意义Android StateFlow初探 前言#xff1a; 最近在学习StateFlow#xff0c;感觉很好用#xff0c;也很神奇#xff0c;于是记录了一下. 1.简介#xff1a; StateFlow 是一个状态容器式可观察数据流#xff0c;可以向其收集器发出当前状态更新和新状态更新。还可通过其 …Android StateFlow初探 前言 最近在学习StateFlow感觉很好用也很神奇于是记录了一下. 1.简介 StateFlow 是一个状态容器式可观察数据流可以向其收集器发出当前状态更新和新状态更新。还可通过其 value 属性读取当前状态值。如需更新状态并将其发送到数据流请为 MutableStateFlow 类的 value 属性分配一个新值。 2.和Flow、LiveData联系,官网解释如下 StateFlow、Flow 和 LiveData StateFlow 和 LiveData 具有相似之处。两者都是可观察的数据容器类并且在应用架构中使用时两者都遵循相似模式。 但请注意StateFlow 和 LiveData 的行为确实有所不同 StateFlow 需要将初始状态传递给构造函数而 LiveData 不需要。当 View 进入 STOPPED 状态时LiveData.observe() 会自动取消注册使用方而从 StateFlow 或任何其他数据流收集数据的操作并不会自动停止。如需实现相同的行为您需要从 Lifecycle.repeatOnLifecycle 块收集数据流。 3.MainViewModel代码 package com.example.stateflowdemo.viewmodelimport androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.example.stateflowdemo.model.LoginUIState import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.delay import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.launch ExperimentalCoroutinesApi class MainViewModel :ViewModel(){private val _loginUIState MutableStateFlowLoginUIState(LoginUIState.Empty)val loginUiState: StateFlowLoginUIState _loginUIStatefun login(username:String,password: String) viewModelScope.launch {_loginUIState.value LoginUIState.Loadingdelay(2000L)if(username android password 123456) {_loginUIState.value LoginUIState.Success} else {_loginUIState.value LoginUIState.Error(账号或密码不正确请重试)}} }4.LoginUIState代码: sealed class LoginUIState {object Success : LoginUIState()data class Error(val message: String) : LoginUIState()object Loading : LoginUIState()object Empty : LoginUIState() }5.测试代码 package com.example.stateflowdemoimport androidx.appcompat.app.AppCompatActivity import android.os.Bundle import androidx.activity.viewModels import androidx.core.view.isVisible import androidx.lifecycle.lifecycleScope import com.example.stateflowdemo.databinding.ActivityMainBinding import com.example.stateflowdemo.model.LoginUIState import com.example.stateflowdemo.viewmodel.MainViewModel import com.google.android.material.snackbar.Snackbar import kotlinx.coroutines.ExperimentalCoroutinesApi OptIn(ExperimentalCoroutinesApi::class) class MainActivity : AppCompatActivity() {private lateinit var binding: ActivityMainBindingprivate val viewModel:MainViewModel by viewModels()override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)binding ActivityMainBinding.inflate(layoutInflater)setContentView(binding.root)initView()initViewModel()}private fun initView() {binding.btnLogin.setOnClickListener {viewModel.login(binding.etUsername.text.toString(),binding.etPassword.text.toString())}}private fun initViewModel() {lifecycleScope.launchWhenStarted {viewModel.loginUiState.collect {listOf(when (it) {is LoginUIState.Success - {Snackbar.make(binding.root,Successfully logged in,Snackbar.LENGTH_LONG).show()binding.progressBar.isVisible false}is LoginUIState.Error - {Snackbar.make(binding.root,it.message,Snackbar.LENGTH_LONG).show()binding.progressBar.isVisible false}is LoginUIState.Loading - {binding.progressBar.isVisible true}else - Unit})}}} }6.布局代码如下 ?xml version1.0 encodingutf-8? androidx.constraintlayout.widget.ConstraintLayout xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoxmlns:toolshttp://schemas.android.com/toolsandroid:layout_widthmatch_parentandroid:layout_heightmatch_parenttools:context.MainActivitycom.google.android.material.textfield.TextInputLayoutandroid:idid/textInputLayoutandroid:layout_width0dpandroid:layout_heightwrap_contentandroid:hintUsernameandroid:layout_marginStart20dpandroid:layout_marginEnd20dpapp:layout_constraintVertical_chainStylepackedapp:layout_constraintBottom_toTopOfid/textInputLayout2app:layout_constraintEnd_toEndOfparentapp:layout_constraintHorizontal_bias0.5app:layout_constraintStart_toStartOfparentapp:layout_constraintTop_toTopOfparentcom.google.android.material.textfield.TextInputEditTextandroid:idid/etUsernameandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:ems15 //com.google.android.material.textfield.TextInputLayoutcom.google.android.material.textfield.TextInputLayoutandroid:idid/textInputLayout2android:layout_width0dpandroid:layout_heightwrap_contentandroid:hintPasswordandroid:layout_marginTop20dpandroid:layout_marginStart20dpandroid:layout_marginEnd20dpapp:layout_constraintBottom_toBottomOfparentapp:layout_constraintEnd_toEndOfparentapp:layout_constraintHorizontal_bias0.5app:layout_constraintStart_toStartOfparentapp:layout_constraintTop_toBottomOfid/textInputLayoutcom.google.android.material.textfield.TextInputEditTextandroid:idid/etPasswordandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:inputTypetextPasswordandroid:ems15 //com.google.android.material.textfield.TextInputLayoutButtonandroid:idid/btnLoginandroid:layout_width150dpandroid:layout_heightwrap_contentandroid:textLoginandroid:layout_marginTop8dpapp:layout_constraintEnd_toEndOfid/textInputLayout2app:layout_constraintTop_toBottomOfid/textInputLayout2 /ProgressBarandroid:idid/progressBarandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:visibilitygoneapp:layout_constraintBottom_toBottomOfid/btnLoginapp:layout_constraintEnd_toEndOfid/textInputLayout2app:layout_constraintStart_toStartOfid/textInputLayout2app:layout_constraintTop_toTopOfid/btnLogin //androidx.constraintlayout.widget.ConstraintLayout7.实现的效果图如下 8.demo源码地址 https://gitee.com/jackning_admin/state-flow-sample
http://www.w-s-a.com/news/48697/

相关文章:

  • 外贸网站建设 深圳seo怎么提升关键词的排名
  • 网站推广效果的评价google关键词
  • 模板网站建站哪家好做微信充值网站
  • 抽奖的网站怎么做的广州小程序定制开发
  • 网站的文件夹建设企业网站公积金
  • 做网站的的价位网站建设 考试题目
  • 深圳比邻网站建设北京优化服务
  • 菏泽网站建设哪家好电子商务网络安全
  • 仿一个网站广州网站建设正规公司
  • 网站建设 目的seo网站关键词排名快速
  • 什么叫做响应式网站自媒体全平台发布
  • 企业网站 案例哪里需要人做钓鱼网站
  • 厚街东莞网站建设网站开发者调试模式
  • 网站推广营销联系方式wordpress adminlte
  • 哪些网站可以做文字链广告卖水果网站建设的策划书
  • 雕刻业务网站怎么做企业qq官网
  • 新华书店的做的数字阅读网站wordpress编辑器格式
  • jq做6个网站做什么好广西临桂建设局网站
  • 网站新闻图片尺寸南京网站设计公司
  • 重庆seo建站网站服务器 安全
  • 咸宁做网站的公司桂林网站建设兼职
  • 教做网站网站开发行业分析
  • 忻州网站建设培训友情链接交换形式有哪些
  • 佛山做外贸网站渠道外贸常用网站
  • 文章收录网站网站及新媒体建设办法
  • 招聘网站排行榜2021找建网站公司
  • 网站建设制作宝塔面板活动宣传推广的形式有哪些
  • 掉关键词网站敏捷软件开发流程
  • 微信小程序格泰网站建设新闻采编与制作专业简历
  • 电子商城建设网站海伦网站建设