Перекомпоновать из @Composable ⇐ Android
Перекомпоновать из @Composable
I have a code that adds a new captain to the list and then updates the list and has to redraw it, but it doesn't do that. Although an object is added to the MutableList
class MainActivity : ComponentActivity() { @SuppressLint("UnusedMaterial3ScaffoldPaddingParameter", "UnrememberedMutableState", "MutableCollectionMutableState" ) @OptIn(ExperimentalMaterial3Api::class) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { var savedCaptains by remember { mutableStateOf(mutableListOf()) } Surface ( modifier = Modifier .fillMaxSize() .verticalScroll(rememberScrollState(), enabled = true), color = MaterialTheme.colorScheme.background ) { Scaffold ( topBar = { CenterAlignedTopAppBar ( colors = TopAppBarDefaults.topAppBarColors( containerColor = Color.Blue, titleContentColor = Color.White ), title = { Text(text = "Captains", textAlign = TextAlign.Center) } ) } ) { innerPadding -> Column ( modifier = Modifier.padding(innerPadding) ) { InputCaptain(list = savedCaptains) CaptainList(this@MainActivity, list = savedCaptains) } } } } } } @Composable fun InputCaptain(list: MutableList) { var name by remember { mutableStateOf(TextFieldValue()) } var ship by remember { mutableStateOf(TextFieldValue()) } var description by remember { mutableStateOf(TextFieldValue()) } Column( modifier = Modifier.fillMaxSize(), verticalArrangement = Arrangement.Top, horizontalAlignment = Alignment.CenterHorizontally ) { OutlinedTextField( value = name, onValueChange = { name = it }, label = { Text("Captain") } ) OutlinedTextField( value = ship, onValueChange = { ship = it }, label = { Text("Ship") } ) OutlinedTextField( value = description, onValueChange = { description = it }, label = { Text("Captain description") } ) Button( onClick = { if (name.text.trim().isNotBlank() && ship.text.trim().isNotBlank() && description.text.trim().isNotBlank()) { list.add(Captain(name.text, ship.text, description.text)) // here i'm saving new captain } } ) { Text(text = "Save", color = Color(0x84, 0x5E, 0xC2)) } } } // function that shows all saved captains @Composable fun CaptainList(activity: Activity, list: MutableList) { Column( modifier = Modifier.padding(16.dp), verticalArrangement = Arrangement.SpaceEvenly ) { val context = LocalContext.current for (captain in list) { val intent = Intent(activity, CaptainCardActivity::class.java) intent.putExtra("name", captain.name) intent.putExtra("ship", captain.ship) intent.putExtra("description", captain.description) intent.putExtra("image", captain.imageName) Column ( modifier = Modifier.padding(10.dp) ) { Row ( modifier = Modifier .clickable(onClick = { activity.startActivity(intent) }) .border(2.dp, Color.LightGray) .fillMaxWidth() ) { val drawableId = remember(captain.imageName) { context.resources.getIdentifier( if (captain.imageName == "") "ic_action_name" else captain.imageName, "drawable", context.packageName ) } Image( painter = painterResource(id = drawableId), contentDescription = "Captain image", modifier = Modifier .size(80.dp) .padding(10.dp) .clip(CircleShape) ) Column ( modifier = Modifier .height(80.dp) .padding(10.dp), verticalArrangement = Arrangement.SpaceEvenly ) { Text(text = captain.name, fontWeight = FontWeight.Bold) Text(text = captain.ship, fontWeight = FontWeight.Bold) } } } } } }
Источник: https://stackoverflow.com/questions/780 ... composable
I have a code that adds a new captain to the list and then updates the list and has to redraw it, but it doesn't do that. Although an object is added to the MutableList
class MainActivity : ComponentActivity() { @SuppressLint("UnusedMaterial3ScaffoldPaddingParameter", "UnrememberedMutableState", "MutableCollectionMutableState" ) @OptIn(ExperimentalMaterial3Api::class) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { var savedCaptains by remember { mutableStateOf(mutableListOf()) } Surface ( modifier = Modifier .fillMaxSize() .verticalScroll(rememberScrollState(), enabled = true), color = MaterialTheme.colorScheme.background ) { Scaffold ( topBar = { CenterAlignedTopAppBar ( colors = TopAppBarDefaults.topAppBarColors( containerColor = Color.Blue, titleContentColor = Color.White ), title = { Text(text = "Captains", textAlign = TextAlign.Center) } ) } ) { innerPadding -> Column ( modifier = Modifier.padding(innerPadding) ) { InputCaptain(list = savedCaptains) CaptainList(this@MainActivity, list = savedCaptains) } } } } } } @Composable fun InputCaptain(list: MutableList) { var name by remember { mutableStateOf(TextFieldValue()) } var ship by remember { mutableStateOf(TextFieldValue()) } var description by remember { mutableStateOf(TextFieldValue()) } Column( modifier = Modifier.fillMaxSize(), verticalArrangement = Arrangement.Top, horizontalAlignment = Alignment.CenterHorizontally ) { OutlinedTextField( value = name, onValueChange = { name = it }, label = { Text("Captain") } ) OutlinedTextField( value = ship, onValueChange = { ship = it }, label = { Text("Ship") } ) OutlinedTextField( value = description, onValueChange = { description = it }, label = { Text("Captain description") } ) Button( onClick = { if (name.text.trim().isNotBlank() && ship.text.trim().isNotBlank() && description.text.trim().isNotBlank()) { list.add(Captain(name.text, ship.text, description.text)) // here i'm saving new captain } } ) { Text(text = "Save", color = Color(0x84, 0x5E, 0xC2)) } } } // function that shows all saved captains @Composable fun CaptainList(activity: Activity, list: MutableList) { Column( modifier = Modifier.padding(16.dp), verticalArrangement = Arrangement.SpaceEvenly ) { val context = LocalContext.current for (captain in list) { val intent = Intent(activity, CaptainCardActivity::class.java) intent.putExtra("name", captain.name) intent.putExtra("ship", captain.ship) intent.putExtra("description", captain.description) intent.putExtra("image", captain.imageName) Column ( modifier = Modifier.padding(10.dp) ) { Row ( modifier = Modifier .clickable(onClick = { activity.startActivity(intent) }) .border(2.dp, Color.LightGray) .fillMaxWidth() ) { val drawableId = remember(captain.imageName) { context.resources.getIdentifier( if (captain.imageName == "") "ic_action_name" else captain.imageName, "drawable", context.packageName ) } Image( painter = painterResource(id = drawableId), contentDescription = "Captain image", modifier = Modifier .size(80.dp) .padding(10.dp) .clip(CircleShape) ) Column ( modifier = Modifier .height(80.dp) .padding(10.dp), verticalArrangement = Arrangement.SpaceEvenly ) { Text(text = captain.name, fontWeight = FontWeight.Bold) Text(text = captain.ship, fontWeight = FontWeight.Bold) } } } } } }
Источник: https://stackoverflow.com/questions/780 ... composable
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как передать параметр в параметр @Composable из @Composable, где первый из них вложен?
Anonymous » » в форуме Android - 0 Ответы
- 83 Просмотры
-
Последнее сообщение Anonymous
-