Activity에서 getCurrentFocus를 호출해 보세요. 이게 안된다면 현재 선택된 View를 클래스 멤버 변수 같은 걸로 저장하셔야 겠죠. SudokuView를 CustomView형태로 만들어서 CustomView가 필요한 정보를 리턴할 수 있도록 할 수도 있구요.
가능하시다면 뷰에 로직을 넣지 마시고 게임로직을 처리하는 클래스를 별도로 두고 거기서 게임에 필요한 데이터를 처리하시고 뷰는 단지 변경된 데이터를 반영해 주는 역할만 하도록 구성하는 것이 코드를 관리하기에 훨씬 좋습니다.
기본 아이디어는 아래처럼 시작할 수 있을 것 같네요.
class SudokuGame {
private lateint var grid: SudokuGrid
init {
createGame()
}
fun createGame() {
puzzle = SudokuGrid(
//SudokuCell 초기화
)
}
fun selectCell(col: Int, row: int) {
grid.selectCell(col, row)
}
}
data class CellsPos(val col: Int, val row: int)
data class SudokuCell(
val number: Int,
val isSelected: Boolean = false
)
class SudokuGrid(
private val cells: HashMap<CellsPos, SudokuCell>
) {
fun selectCell(col: int, row: int) {
val selectedCell = cells[CellPos(col, row)] ?: return
cells[CellPos(col, row)] = selectedCell.copy(isSelected = true)
}
}
//Activity
private val game = SudokuGame()
val gamboard: SudokuGameBoard = ...
gamboard.setOnClickListener { view: SudokuCellView, col: Int, row: Int ->
game.selectSell(col,row)
}