Anko Сгенерируйте EditText и дайте им onClickListener для перемещения в другой EditText - PullRequest
0 голосов
/ 28 августа 2018

Я хочу построить игру с кроссвордами, используя Anko (Android Kotlin), он сгенерирует EditText и даст им onCLickListener для перемещения (вертикально / горизонтально) к другому EditText. Я успешно сгенерировал EditText, но не знаю, как дать им onClickListener для перехода к другому EditText.

Это то, что я сделал

class CrosswordActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        CrosswordActivityUI().setContentView(this)
    }
}

class CrosswordActivityUI : AnkoComponent<CrosswordActivity> {
    private val crossword = arrayOf(
            arrayOf("w", "o", "r", "k"),
            arrayOf("o", "", "u", ""),
            arrayOf("r", "u", "n", ""),
            arrayOf("k", "", "", "")
    )

    override fun createView(ui: AnkoContext<CrosswordActivity>) = ui.apply {
        verticalLayout {
            for (rows in crossword) {
                linearLayout {
                    for (column in rows) {
                        editText {
                            visibility = if (column.isNotEmpty()) View.VISIBLE else View.INVISIBLE
                            onClick {

                            }
                        }
                    }
                }
            }
        }
    }.view
}

Я построил игру, используя React Native, просто пытаюсь переписать ее на Native Android. Я новичок в разработке Native Android, дайте мне знать, если есть другие способы сделать это, спасибо заранее!

1 Ответ

0 голосов
/ 31 августа 2018

Вероятно, нехорошо встраивать логику навигации в представления так много ... но если вы хотите пойти по этому пути: если вы можете расширить свои циклы, чтобы иметь индекс, тогда onClick для каждого текста редактирования может использовать эти Индексы, чтобы решить, какой EditText будет следующим.

for ((index, value) in array.withIndex()) {
    println("the element at $index is $value")
}

Вам также придется создать структуру данных для записи EditText для каждой ячейки или, возможно, использовать GridLayout. Это делается для того, чтобы код onClick для каждого EditText мог искать своих соседей.

Итак, у вас есть psuedocode вроде:

onClick {
   val nextX = f(x)
   val nextY = g(y)
   editTextGrid[nextX][nextY].requestFocus()
}
...