Compose中令人疑惑的地方,请大神指点

发布于:2024-04-29 ⋅ 阅读:(24) ⋅ 点赞:(0)

在Android Studio中学习,碰到了令人疑惑的地方,请路过大神指点! (1)第一段代码

@Composable
fun Test() {
    Log.d("调试","开始执行..")
    var count by remember{ mutableStateOf(0) }
    Column {
        val list = mutableListOf("A","B","C","D")
        Log.d("调试","a,count="+count.toString())
        for (num in list){
            Text(text ="当前字母:$num")
            Log.d("调试","b,count="+count.toString())
            count++
            Log.d("调试","c,count="+count.toString())
            Log.d("调试","d,count="+count.toString())
        }
        Log.d("调试","e,count="+count.toString())
        Text(text = "一共 $count 个字母")
        count++
        Log.d("调试","f,count="+count.toString())
    }
}

运行界面以及调试结果如下:

image.png image.png

从运行结果看,代码块Test()不会自动重组。

(2)第二段代码

fun Test1() {
    Log.d("调试","开始执行..")
    var count by remember{ mutableStateOf(0) }
    //代码之前加一个图片
    Column(modifier = Modifier.padding(150.dp,0.dp,0.dp,0.dp)) {
        Image(painter =  painterResource(id = R.drawable.tv_fuya), contentScale= ContentScale.FillHeight, alignment = Alignment.Center , contentDescription =null,modifier = Modifier
        )
    }
    //原始代码
    Column {
        val list = mutableListOf("A","B","C","D")
        Log.d("调试","a,count="+count.toString())
        for (num in list){
            Text(text ="当前字母:$num")
            Log.d("调试","b,count="+count.toString())
            count++
            Log.d("调试","c,count="+count.toString())
            Log.d("调试","d,count="+count.toString())
        }
        Log.d("调试","e,count="+count.toString())
        Text(text = "一共 $count 个字母")
        count++
        Log.d("调试","f,count="+count.toString())
    }
}

运行界面以及调试结果如下:

image.png image.png image.png

在第一代码之前加一个图片,代码块Test1()就自动重组了!

(3)第三段代码

@Composable
fun Test2() {
    Log.d("调试","开始执行..")
    var count by remember{ mutableStateOf(0) }
    //原始代码
    Column {
        val list = mutableListOf("A","B","C","D")
        Log.d("调试","a,count="+count.toString())
        for (num in list){
            Text(text ="当前字母:$num")
            Log.d("调试","b,count="+count.toString())
            count++
            Log.d("调试","c,count="+count.toString())
            Log.d("调试","d,count="+count.toString())
        }
        Log.d("调试","e,count="+count.toString())
        Text(text = "一共 $count 个字母")
        count++
        Log.d("调试","f,count="+count.toString())
    }
    //代码之后加一个图片
    Column(modifier = Modifier.padding(150.dp,0.dp,0.dp,0.dp)) {
        Image(painter =  painterResource(id = R.drawable.tv_fuya), contentScale= ContentScale.FillHeight, alignment = Alignment.Center , contentDescription =null,modifier = Modifier
        )
    }
}

运行界面以及调试结果如下:

image.png image.png

在第一代码之后加一个图片,代码块Test2()就不会自动重组了?这是什么原因呢?


网站公告

今日签到

点亮在社区的每一天
去签到