[Day3] Jetpack Compose: 为什麽这个EditText不会动?

今天跑去面试新工作和准备下一阶段面试,十一点才想到要写,所以就意思意思一下XD,之後会回来补齐的QQ


用XML写过Android UI的人应该知道EditText这个东西,他可以提供使用者输入文字,并且即时显示出来,那Jetpack Compose里面的EditText是什麽东西呢?

TextField

TextField在Jetpack Compose中使用起来跟EditText很像,都是提供给使用者的输入框,差别在於,使用TextField我们有两个变数需要处理,一个是value,负责表示要显示的内容,另一个是onValueChange,则是当使用者更新内容的时候,会执行的程序码:

TextField(
    value = "text",
    onValueChange = {
        
    },
)

执行之後你会发现不管怎麽按怎麽打,这个Textfield只会显示"text"这个字串,因为我们没有在onValueChange做任何事情,为了让他的内容会变,首先我们先宣告一个变数:

private var text : String = "";

再来我们再onValueChange更新我们的text

TextField(
    value = text,
    onValueChange = {
        text = it
    },
)

在执行一次就会发现,他还是不会动!!!

为什麽呢? 这就牵扯到Jetpack Compose中使用到的状态!

MutableState

MutableState是Jetpack Compose提供给使用者储存状态的一个interface:

interface MutableState<T> : State<T> {
    override var value: T
}

其中value存的值就是我们要存入的状态,他其实就是一个可观察介面,所以如果要使用LiveData
和Flow也是可以的,而官网也建议了三种等价的宣告方式:

val mutableState = remember { mutableStateOf(default) }
var value by remember { mutableStateOf(default) }
val (value, setValue) = remember { mutableStateOf(default) }

那这里我们就简单宣告一个mutableState就好,注意composable的语法和一般kotlin的语法不一样,所以宣告的部分建议写在@composable里面

val mutableState = remember { mutableStateOf("") }
// A surface container using the 'background' color from the theme
TextField(

    value = mutableState.value,
    onValueChange = {
        mutableState.value = it
    },
)

於是他就动了~~~


<<:  Day 4 ( 入门 ) 鱼儿水中游

>>:  新新新手阅读 Angular 文件 - Day04

Day18 vue.js新增文章

延续昨日 今天我们来新增专案 首先需要先新增一个Addproject.vue 新增path 以及修改...

D1 (9/1)-全家(5903),统一超(2912)

注:发文日和截图的日期不一定是同一天。 买进全家(5903)、统一超(2912) 今日损益:-7 原...

[ Vue ] 使用 Vitawind 1.2 来 建置 Vite + Tailwind JIT 专案

建立 Vite 专案 在你要放置专案的地方执行这个指令来建立 vue 模板的 vite 专案 # n...

Conda 安装

在我还没真的弄坏一台Ubuntu环境之前, 其实我没想过要使用虚拟环境或是conda。 我是指,专案...

JS 06 - 建构函式

大家好! 今天开始就要学习函式库的基础了。 我们进入今天的主题吧! 物件模板 我们先来看下方的资料:...