Как мне передать массив в более высокую область

#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 }