状态接上一章

2024-01-30 04:20
文章标签 状态 接上 一章

本文主要是介绍状态接上一章,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.状态恢复

parceable

pluginManagement {repositories {google()mavenCentral()gradlePluginPortal()}//插件plugins{id("com.android.application")version("7.1.0-alpha05")id("com.android.library")version("7.1.0-alpha05")id("org.jetbrains.kotlin.android")version("1.5.10")id("org.jetbrains.kotlin.plugin.parcelize")version("1.5.10")}}
dependencyResolutionManagement {repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)repositories {google()mavenCentral()}
}rootProject.name = "JetpackComposeState"
include(":app")
package com.jmj.jetpackcomposestate.examplesimport android.os.Bundle
import android.os.Parcelable
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.versionedparcelable.ParcelFieldimport com.jmj.jetpackcomposestate.ui.theme.JetpackComposeStateTheme
import kotlinx.android.parcel.Parcelizeclass StateRecoveryParcelableActivity :ComponentActivity(){@Parcelize //自动 实现这个接口data class City(val name:String , var country:String) : Parcelableoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContent {JetpackComposeStateTheme {CityScreen()}}}@Composablefun CityScreen(){val (city,setCity) = rememberSaveable {mutableStateOf(City("Madrid","Spain"))}Row (verticalAlignment = Alignment.CenterVertically,modifier = Modifier.padding(10.dp)){TextButton(onClick = {setCity(City("Beijing","China")) },colors = ButtonDefaults.buttonColors()) {Text(text = "Click to change")}Text(text = "${city.country} - ${city.name}")}}
}

MapSaver

 

package com.jmj.jetpackcomposestate.examplesimport android.os.Bundle
import android.os.Parcelable
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.mapSaver
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.versionedparcelable.ParcelFieldimport com.jmj.jetpackcomposestate.ui.theme.JetpackComposeStateTheme
import kotlinx.android.parcel.Parcelizeclass StateRecoveryMapActivity :ComponentActivity(){data class City(val name:String , var country:String)override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContent {JetpackComposeStateTheme {CityScreen()}}}@Composablefun CityScreen(){//指定 mapSaver , 用于存储时如何构建一个mao对象,获取时如何构建一个City对象val citySaver = run {val nameKey = "Name"val  countryKey = "Country"mapSaver(save = { mapOf(nameKey to it.name,countryKey to it.country) },restore = { City(it[nameKey] as String,it[countryKey] as String)})}val (city,setCity) = rememberSaveable(stateSaver = citySaver) {mutableStateOf(City("Madrid","Spain"))}Row (verticalAlignment = Alignment.CenterVertically,modifier = Modifier.padding(10.dp)){TextButton(onClick = {setCity(City("Beijing","China")) },colors = ButtonDefaults.buttonColors()) {Text(text = "Click to change")}Text(text = "${city.country} - ${city.name}")}}
}

ListSaver 

package com.jmj.jetpackcomposestate.examplesimport android.os.Bundle
import android.os.Parcelable
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.listSaver
import androidx.compose.runtime.saveable.mapSaver
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.versionedparcelable.ParcelFieldimport com.jmj.jetpackcomposestate.ui.theme.JetpackComposeStateTheme
import kotlinx.android.parcel.Parcelizeclass StateRecoveryListActivity :ComponentActivity(){data class City(val name:String , var country:String)override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContent {JetpackComposeStateTheme {CityScreen()}}}@Composablefun CityScreen(){//指定 mapSaver , 用于存储时如何构建一个map对象,获取时如何构建一个City对象
//        val nameKey = "Name"
//        val  countryKey = "Country"
//           val citySaver = mapSaver(
//                save = { mapOf(nameKey to it.name,countryKey to it.country) },
//                restore = { City(it[nameKey] as String,it[countryKey] as String)}
//            )val citySaver = listSaver(save = { listOf(it.name,it.country) },restore = { City(it[0] as String,it[1] as String)})val (city,setCity) = rememberSaveable(stateSaver = citySaver) {mutableStateOf(City("Madrid","Spain"))}Row (verticalAlignment = Alignment.CenterVertically,modifier = Modifier.padding(10.dp)){TextButton(onClick = {setCity(City("Beijing","China")) },colors = ButtonDefaults.buttonColors()) {Text(text = "Click to change")}Text(text = "${city.country} - ${city.name}")}}
}

这篇关于状态接上一章的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/659090

相关文章

linux进程D状态的解决思路分享

《linux进程D状态的解决思路分享》在Linux系统中,进程在内核模式下等待I/O完成时会进入不间断睡眠状态(D状态),这种状态下,进程无法通过普通方式被杀死,本文通过实验模拟了这种状态,并分析了如... 目录1. 问题描述2. 问题分析3. 实验模拟3.1 使用losetup创建一个卷作为pv的磁盘3.

Java实现状态模式的示例代码

《Java实现状态模式的示例代码》状态模式是一种行为型设计模式,允许对象根据其内部状态改变行为,本文主要介绍了Java实现状态模式的示例代码,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来... 目录一、简介1、定义2、状态模式的结构二、Java实现案例1、电灯开关状态案例2、番茄工作法状态案例

通过prometheus监控Tomcat运行状态的操作流程

《通过prometheus监控Tomcat运行状态的操作流程》文章介绍了如何安装和配置Tomcat,并使用Prometheus和TomcatExporter来监控Tomcat的运行状态,文章详细讲解了... 目录Tomcat安装配置以及prometheus监控Tomcat一. 安装并配置tomcat1、安装

Linux之进程状态&&进程优先级详解

《Linux之进程状态&&进程优先级详解》文章介绍了操作系统中进程的状态,包括运行状态、阻塞状态和挂起状态,并详细解释了Linux下进程的具体状态及其管理,此外,文章还讨论了进程的优先级、查看和修改进... 目录一、操作系统的进程状态1.1运行状态1.2阻塞状态1.3挂起二、linux下具体的状态三、进程的

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

hdu1565(状态压缩)

本人第一道ac的状态压缩dp,这题的数据非常水,很容易过 题意:在n*n的矩阵中选数字使得不存在任意两个数字相邻,求最大值 解题思路: 一、因为在1<<20中有很多状态是无效的,所以第一步是选择有效状态,存到cnt[]数组中 二、dp[i][j]表示到第i行的状态cnt[j]所能得到的最大值,状态转移方程dp[i][j] = max(dp[i][j],dp[i-1][k]) ,其中k满足c

状态dp总结

zoj 3631  N 个数中选若干数和(只能选一次)<=M 的最大值 const int Max_N = 38 ;int a[1<<16] , b[1<<16] , x[Max_N] , e[Max_N] ;void GetNum(int g[] , int n , int s[] , int &m){ int i , j , t ;m = 0 ;for(i = 0 ;

hdu3006状态dp

给你n个集合。集合中均为数字且数字的范围在[1,m]内。m<=14。现在问用这些集合能组成多少个集合自己本身也算。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.Inp

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

实例:如何统计当前主机的连接状态和连接数

统计当前主机的连接状态和连接数 在 Linux 中,可使用 ss 命令来查看主机的网络连接状态。以下是统计当前主机连接状态和连接主机数量的具体操作。 1. 统计当前主机的连接状态 使用 ss 命令结合 grep、cut、sort 和 uniq 命令来统计当前主机的 TCP 连接状态。 ss -nta | grep -v '^State' | cut -d " " -f 1 | sort |