Remember MutableState
Remember 記憶
remember的作用是在記憶體儲存變數。
MutableState 狀態
MutableState用來儲存變數,一個Composable函式可以有多個remember,每一個remember對映一個MutableState物件,每一個MutableState儲存一個變數。
MutableState對映的變數被「更改」,MutableState就會通知「使用」此變數的UI元件(例:TextField)重繪UI介面。

語法
儲存變數到記憶體中。
var 變數 by remember { mutableStateOf("預設值") }
var text by remember { mutableStateOf("") }
var num by remember { mutableStateOf(0) }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import androidx.compose.runtime.remember
import androidx.compose.runtime.mutableStateOf
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
testUI()
}
}
}
@Composable
fun testUI() {
// 1. 儲存text變數在記憶體
var text by remember { mutableStateOf("") }
// 2. TextField使用text變數
TextField(
value = text, // 使用狀態值
onValueChange = { newText ->
text = newText // mutableState監控text變數被修改,通知TextField 重繪UI
},
modifier = Modifier
.fillMaxWidth()
.padding(top = 30.dp)
)
}
以下是舊文章。
如果只使用var count = 1; 變數再重新繪製手機介面時就又變成1,所以要使用 by remeber
以下count = mutable類別,要使用count.value讀取
1
2
3
4
5
6
7
var count = remember {
mutableStateOf(1)
}
Text(text = "xx${count.value}xxx", Modifier.clickable {
count.value++
Log.d("xxxx","I comin")
} )
以下count使用by,count仍是int類別,就不用count.value
1
2
3
var count by remember {
mutableStateOf(1)
}
1
2
3
4
5
6
7
8
9
10
11
@Composable
fun StateSample() {
var count by remember {
mutableStateOf(1)
}
Log.d("xxxx","outter${count}")
Text(text = "xx${count}xxx", Modifier.clickable {
count++
Log.d("xxxx","I comin")
} )
}