Где проблема с обновлением в моем приложении для AndroidAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Где проблема с обновлением в моем приложении для Android

Сообщение 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))
}
}
}
}
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/792 ... ndroid-app
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»