Я новичок в Kotlin и написал этот код для университетского задания (это первый раз, когда я использовал его и, вероятно, последний), но я столкнулся с проблемой, когда главный экран не обновляется, как ожидал. Я использую Android Studio для создания приложения. Когда я нажимаю кнопку, текст посередине и цвета кнопок должны измениться, но этого не происходит. Пожалуйста, не обвиняйте меня в коде s&^$, но я совершенно не понимаю, что происходит, и чат gpt совершенно бесполезен.
package com.example.maze_lab
import android.os.Bundle
import android.util.Log
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material3.Button
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.example.maze_lab.ui.theme.Maze_labTheme
data class Position(var posRow: Int, var posCol: Int)
var mapRowSize = 4
var mapColSize = 4
class MainActivity : ComponentActivity() {
val roomsArray = arrayOf(
arrayOf(10, 8, 10, 9),
arrayOf(28, 1, 0, 12),
arrayOf(12, 10, 9, 13),
arrayOf(6, 5, 6, 5)
)
val roomMovementOption = arrayOf(
arrayOf(arrayOf(0,0,0,0), arrayOf(0,0,0,0), arrayOf(0,0,0,0), arrayOf(0,0,0,0)),
arrayOf(arrayOf(0,0,0,0), arrayOf(0,0,0,0), arrayOf(0,0,0,0), arrayOf(0,0,0,0)),
arrayOf(arrayOf(0,0,0,0), arrayOf(0,0,0,0), arrayOf(0,0,0,0), arrayOf(0,0,0,0)),
arrayOf(arrayOf(0,0,0,0), arrayOf(0,0,0,0), arrayOf(0,0,0,0), arrayOf(0,0,0,0))
)
val playerPos = mutableStateOf(Position(0,0))
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
calculateBitsToMoves(roomsArray, roomMovementOption)
findStartPos(roomsArray, playerPos)
for(row in roomsArray.indices) {
for (col in roomsArray[row].indices) {
roomMovementOption[row][col][3] = if ((roomsArray[row][col] and 0b0001) != 0) 1 else 0 //left
roomMovementOption[row][col][2] = if ((roomsArray[row][col] and 0b0010) != 0) 1 else 0 //right
roomMovementOption[row][col][1] = if ((roomsArray[row][col] and 0b0100) != 0) 1 else 0 //top
roomMovementOption[row][col][0] = if ((roomsArray[row][col] and 0b1000) != 0) 1 else 0 //down
Log.i(
"movementOption",
"${roomMovementOption[row][col][0]} ${roomMovementOption[row][col][1]} ${roomMovementOption[row][col][2]} ${roomMovementOption[row][col][3]}"
)
}
}
enableEdgeToEdge()
setContent {
Maze_labTheme {
Surface(modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background)
{
RenderBoard(
movementOption = roomMovementOption,
modifier = Modifier.padding(8.dp),
position = playerPos,
)
Log.i("UpdatePos", "row: ${playerPos.value.posRow}, col: ${playerPos.value.posCol}")
}
}
}
}
}
fun calculateBitsToMoves(
values: Array,
movment: Array
) {
for(row in values.indices) {
for (col in values[row].indices) {
movment[row][col][3] = if ((values[row][col] and 0b0001) != 0) 1 else 0 //left
movment[row][col][2] = if ((values[row][col] and 0b0010) != 0) 1 else 0 //right
movment[row][col][1] = if ((values[row][col] and 0b0100) != 0) 1 else 0 //top
movment[row][col][0] = if ((values[row][col] and 0b1000) != 0) 1 else 0 //down
}
}
}
fun findStartPos(values: Array, position: MutableState)
{
for(row in values.indices)
{
for(col in values[row].indices)
{
if ((values[row][col] and 0b10000) != 0)
{
position.value.posCol = col
position.value.posRow = row
Log.i("PosOfPlayer", "row: ${position.value.posRow}, col: ${position.value.posCol}")
break
}
}
}
}
fun UpdatePos(position: MutableState, posRow:Int, posCol:Int)
{
position.value.posRow = position.value.posRow + posRow
position.value.posCol = position.value.posCol + posCol
if(position.value.posRow < 0)
{
position.value.posRow = mapRowSize - 1
}
else if(position.value.posRow > mapRowSize-1)
{
position.value.posRow = 0
}
if(position.value.posCol < 0)
{
position.value.posCol = mapColSize - 1
}
else if(position.value.posCol > mapColSize-1)
{
position.value.posCol = 0
}
}
@Composable
fun RenderBoard(position: MutableState,
movementOption: Array,
modifier: Modifier = Modifier
)
{
var testtest = remember { mutableStateOf(0) }
Log.i("Ja pierdole", "Czy to w ogole działa?")
Column(modifier = modifier.padding(16.dp)) {
val rows = 3
val cols = 3
for (row in 0 until rows) {
Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceEvenly) {
for (col in 0 until cols) {
when {
(row == 1 && col == 1) -> {
// "x" - Display text with row and column
Text(
text = "Row: ${position.value.posRow}, Col: ${position.value.posCol}",
modifier = Modifier.padding(8.dp)
)
}
(row == 0 && col == 1) -> { //up
val bgColor = if (movementOption[position.value.posRow][position.value.posCol][1] == 1) {
Color.Green
} else {
Color.Red
}
Button(
onClick = {
UpdatePos(position = position, posRow = 1, posCol = 1)
},
modifier = Modifier.padding(8.dp).background(bgColor)
) {
Text(text ="Up")
}
}
(row == 1 && col == 0) -> { //Left
val bgColor = if (movementOption[position.value.posRow][position.value.posCol][3] == 1) {
Color.Green
} else {
Color.Red
}
Button(
onClick = {
UpdatePos(position = position, posRow = 1, posCol = 1)
},
modifier = Modifier.padding(8.dp).background(bgColor)
) {
Text(text ="Left")
}
}
(row == 1 && col == 2) -> { //Right
val bgColor = if (movementOption[position.value.posRow][position.value.posCol][2] == 1) {
Color.Green
} else {
Color.Red
}
Button(
onClick = {
UpdatePos(position = position, posRow = 1, posCol = 1)
},
modifier = Modifier.padding(8.dp).background(bgColor)
) {
Text(text ="Right")
}
}
(row == 2 && col == 1) -> { //Down
val bgColor = if (movementOption[position.value.posRow][position.value.posCol][0] == 1) {
Color.Green
} else {
Color.Red
}
Button(
onClick = {
UpdatePos(position = position, posRow = 1, posCol = 1)
},
modifier = Modifier.padding(8.dp).background(bgColor)
) {
Text(text ="Down")
}
}
else -> {
// "i" - Empty space
Spacer(modifier = Modifier.size(50.dp))
}
}
}
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... ndroid-app
Где проблема с обновлением в моем приложении для Android ⇐ Android
Форум для тех, кто программирует под Android
-
Anonymous
1734562955
Anonymous
Я новичок в Kotlin и написал этот код для университетского задания (это первый раз, когда я использовал его и, вероятно, последний), но я столкнулся с проблемой, когда главный экран не обновляется, как ожидал. Я использую Android Studio для создания приложения. Когда я нажимаю кнопку, текст посередине и цвета кнопок должны измениться, но этого не происходит. Пожалуйста, не обвиняйте меня в коде s&^$, но я совершенно не понимаю, что происходит, и чат gpt совершенно бесполезен.
package com.example.maze_lab
import android.os.Bundle
import android.util.Log
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material3.Button
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.example.maze_lab.ui.theme.Maze_labTheme
data class Position(var posRow: Int, var posCol: Int)
var mapRowSize = 4
var mapColSize = 4
class MainActivity : ComponentActivity() {
val roomsArray = arrayOf(
arrayOf(10, 8, 10, 9),
arrayOf(28, 1, 0, 12),
arrayOf(12, 10, 9, 13),
arrayOf(6, 5, 6, 5)
)
val roomMovementOption = arrayOf(
arrayOf(arrayOf(0,0,0,0), arrayOf(0,0,0,0), arrayOf(0,0,0,0), arrayOf(0,0,0,0)),
arrayOf(arrayOf(0,0,0,0), arrayOf(0,0,0,0), arrayOf(0,0,0,0), arrayOf(0,0,0,0)),
arrayOf(arrayOf(0,0,0,0), arrayOf(0,0,0,0), arrayOf(0,0,0,0), arrayOf(0,0,0,0)),
arrayOf(arrayOf(0,0,0,0), arrayOf(0,0,0,0), arrayOf(0,0,0,0), arrayOf(0,0,0,0))
)
val playerPos = mutableStateOf(Position(0,0))
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
calculateBitsToMoves(roomsArray, roomMovementOption)
findStartPos(roomsArray, playerPos)
for(row in roomsArray.indices) {
for (col in roomsArray[row].indices) {
roomMovementOption[row][col][3] = if ((roomsArray[row][col] and 0b0001) != 0) 1 else 0 //left
roomMovementOption[row][col][2] = if ((roomsArray[row][col] and 0b0010) != 0) 1 else 0 //right
roomMovementOption[row][col][1] = if ((roomsArray[row][col] and 0b0100) != 0) 1 else 0 //top
roomMovementOption[row][col][0] = if ((roomsArray[row][col] and 0b1000) != 0) 1 else 0 //down
Log.i(
"movementOption",
"${roomMovementOption[row][col][0]} ${roomMovementOption[row][col][1]} ${roomMovementOption[row][col][2]} ${roomMovementOption[row][col][3]}"
)
}
}
enableEdgeToEdge()
setContent {
Maze_labTheme {
Surface(modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background)
{
RenderBoard(
movementOption = roomMovementOption,
modifier = Modifier.padding(8.dp),
position = playerPos,
)
Log.i("UpdatePos", "row: ${playerPos.value.posRow}, col: ${playerPos.value.posCol}")
}
}
}
}
}
fun calculateBitsToMoves(
values: Array,
movment: Array
) {
for(row in values.indices) {
for (col in values[row].indices) {
movment[row][col][3] = if ((values[row][col] and 0b0001) != 0) 1 else 0 //left
movment[row][col][2] = if ((values[row][col] and 0b0010) != 0) 1 else 0 //right
movment[row][col][1] = if ((values[row][col] and 0b0100) != 0) 1 else 0 //top
movment[row][col][0] = if ((values[row][col] and 0b1000) != 0) 1 else 0 //down
}
}
}
fun findStartPos(values: Array, position: MutableState)
{
for(row in values.indices)
{
for(col in values[row].indices)
{
if ((values[row][col] and 0b10000) != 0)
{
position.value.posCol = col
position.value.posRow = row
Log.i("PosOfPlayer", "row: ${position.value.posRow}, col: ${position.value.posCol}")
break
}
}
}
}
fun UpdatePos(position: MutableState, posRow:Int, posCol:Int)
{
position.value.posRow = position.value.posRow + posRow
position.value.posCol = position.value.posCol + posCol
if(position.value.posRow < 0)
{
position.value.posRow = mapRowSize - 1
}
else if(position.value.posRow > mapRowSize-1)
{
position.value.posRow = 0
}
if(position.value.posCol < 0)
{
position.value.posCol = mapColSize - 1
}
else if(position.value.posCol > mapColSize-1)
{
position.value.posCol = 0
}
}
@Composable
fun RenderBoard(position: MutableState,
movementOption: Array,
modifier: Modifier = Modifier
)
{
var testtest = remember { mutableStateOf(0) }
Log.i("Ja pierdole", "Czy to w ogole działa?")
Column(modifier = modifier.padding(16.dp)) {
val rows = 3
val cols = 3
for (row in 0 until rows) {
Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceEvenly) {
for (col in 0 until cols) {
when {
(row == 1 && col == 1) -> {
// "x" - Display text with row and column
Text(
text = "Row: ${position.value.posRow}, Col: ${position.value.posCol}",
modifier = Modifier.padding(8.dp)
)
}
(row == 0 && col == 1) -> { //up
val bgColor = if (movementOption[position.value.posRow][position.value.posCol][1] == 1) {
Color.Green
} else {
Color.Red
}
Button(
onClick = {
UpdatePos(position = position, posRow = 1, posCol = 1)
},
modifier = Modifier.padding(8.dp).background(bgColor)
) {
Text(text ="Up")
}
}
(row == 1 && col == 0) -> { //Left
val bgColor = if (movementOption[position.value.posRow][position.value.posCol][3] == 1) {
Color.Green
} else {
Color.Red
}
Button(
onClick = {
UpdatePos(position = position, posRow = 1, posCol = 1)
},
modifier = Modifier.padding(8.dp).background(bgColor)
) {
Text(text ="Left")
}
}
(row == 1 && col == 2) -> { //Right
val bgColor = if (movementOption[position.value.posRow][position.value.posCol][2] == 1) {
Color.Green
} else {
Color.Red
}
Button(
onClick = {
UpdatePos(position = position, posRow = 1, posCol = 1)
},
modifier = Modifier.padding(8.dp).background(bgColor)
) {
Text(text ="Right")
}
}
(row == 2 && col == 1) -> { //Down
val bgColor = if (movementOption[position.value.posRow][position.value.posCol][0] == 1) {
Color.Green
} else {
Color.Red
}
Button(
onClick = {
UpdatePos(position = position, posRow = 1, posCol = 1)
},
modifier = Modifier.padding(8.dp).background(bgColor)
) {
Text(text ="Down")
}
}
else -> {
// "i" - Empty space
Spacer(modifier = Modifier.size(50.dp))
}
}
}
}
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79292732/where-is-problem-with-refreshing-in-my-android-app[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия