Anko 生成 EditText 并给他们 onClickListener 以移动到另一个 EditText

Anko Generate EditText and Give Them onClickListener to Move to Another EditText

我想使用 Anko(Android Kotlin) 构建一个填字游戏,它会生成 EditText 并为它们提供 onCLickListener 以 Move(Vertically/Horizontally) 到另一个 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 开发的新手,请让我知道是否有其他方法可以做到这一点,在此先感谢!

将导航逻辑构建到视图中可能不太好......但是如果你想走这条路:如果你可以扩展你的循环以获得索引,那么每个编辑文本的 onClick 可以使用这些索引来决定接下来要关注哪个 EditText。

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

您还必须构建一个数据结构来记录每个单元格的 EditText,或者可能使用 GridLayout。这样每个 EditText 的 onClick 代码就能够查找其邻居。

所以你有这样的伪代码:

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