import
androidx.appcompat.app.AppCompatActivity
import
android.os.Bundle
import
androidx.activity.compose.setContent
import
androidx.compose.animation.animateColorAsState
import
androidx.compose.foundation.background
import
androidx.compose.foundation.layout.Column
import
androidx.compose.foundation.layout.Row
import
androidx.compose.foundation.layout.fillMaxHeight
import
androidx.compose.foundation.layout.padding
import
androidx.compose.foundation.
lazy
.LazyColumn
import
androidx.compose.foundation.
lazy
.itemsIndexed
import
androidx.compose.material.Surface
import
androidx.compose.material.TabRowDefaults.Divider
import
androidx.compose.material.Text
import
androidx.compose.material.Checkbox
import
androidx.compose.runtime.*
import
androidx.compose.runtime.saveable.rememberSaveable
import
androidx.compose.ui.Modifier
import
androidx.compose.ui.graphics.Color
import
androidx.compose.ui.tooling.preview.Preview
import
androidx.compose.ui.unit.dp
class
MainActivity
:
AppCompatActivity() {
override
fun onCreate(savedInstanceState
:
Bundle?) {
super
.onCreate(savedInstanceState)
setContent {
MyApp {
MyScreenContent()
}
}
}
}
@
Composable
fun MyApp(content
:
@
Composable () -> Unit) {
Surface(color
=
Color.White) {
content()
}
}
@
Composable
fun MyScreenContent(
names
:
List<String>
=
List(
15
) {
"Item #$it"
},
completed
:
MutableList<Boolean>
=
MutableList(
15
) {
false
}
) {
Column(modifier
=
Modifier.fillMaxHeight()) {
NameList(names, Modifier.weight(
1
f), completed)
}
}
@
Composable
fun NameList(names
:
List<String>, modifier
:
Modifier, completed
:
MutableList<Boolean>) {
LazyColumn(modifier
=
modifier) {
itemsIndexed(items
=
names) { index
:
Int, item
:
String ->
Greeting(name
=
item, completed, index)
Divider(color
=
Color.Black)
}
}
}
@
Composable
fun Greeting(name
:
String, completedList
:
MutableList<Boolean>, index
:
Int) {
var
isSelected by rememberSaveable { mutableStateOf(completedList[index]) }
val
backgroundColor by animateColorAsState(
if
(isSelected) Color.Blue
else
Color.Transparent)
Row {
Text(
text
=
"Hello $name!"
,
modifier
=
Modifier
.padding(
24
.dp)
)
Checkbox(
checked
=
isSelected,
onCheckedChange
=
{
isSelected
=
!isSelected
completedList[index]
=
!isSelected
},
modifier
=
Modifier
.background(color
=
backgroundColor)
)
}
}
@
Preview(
"MyScreen preview"
)
@
Composable
fun DefaultPreview() {
MyApp {
MyScreenContent()
}
}