#android #kotlin
#Android #kotlin
Вопрос:
Вот начало моего проекта Android
override fun onCreate(savedInstanceState: Bundle?) {
var (ngbpBoard, shipList) = initTheGame()
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
Я хочу, чтобы массив ngbpBoard был доступен для события click, а это не так.
Когда я помещаю
var ngbpBoard = IntArray(100) { WATER }
оператор в верхней части класса, он переопределяет тот, который я создал в initTheGame().
Как мне передать эти данные вверх и обратно, пожалуйста?
Комментарии:
1. В любом случае, затенение — плохая идея, старайтесь не называть две переменные одинаково.
2. В том-то и дело, что это не две переменные, это одна и та же переменная.
Ответ №1:
Если вы хотите сначала инициализировать ngbpBoard
в onCreate
, то вы можете сделать что-то вроде:
class MainActivity : AppCompatActivity() {
// Do not initialize yet
private lateinit var ngbpBoard: IntArray
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val (ngbpBoard, shipList) = initGame()
// Initialize this variable
this.ngbpBoard = ngbpBoard
}
}
В противном случае, если вы хотите инициализировать создание экземпляра и просто изменить его в onCreate
, просто замените
private lateinit var ngbpBoard: IntArray
с
private var ngbpBoard: IntArray = IntArray(100) { WATER }